c++ core dump配置 c++ linux下如何开启和分析core dump文件

轻枫小哥_8471

轻枫小哥_8471

2026-03-23

857人浏览

原创

core dump未生成需先检查ulimit -c是否为0、/proc/sys/kernel/core_pattern配置及权限;gdb调试需确保core与原二进制匹配且含调试符号,动态库路径正确。

c++ core dump配置 c++ linux下如何开启和分析core dump文件

core dump 文件没生成?先检查 ulimit 和系统配置

Linux 默认可能禁用 core dump,即使程序崩溃也不会留文件。最常见原因是 ulimit -c 被设为 0。

  • 运行 ulimit -c 查当前限制:输出 0 表示关闭,unlimited 或具体数字(如 1048576)才可能生成
  • 临时开启:执行 ulimit -c unlimited(仅对当前 shell 及其子进程生效)
  • 永久生效需改配置:在 /etc/security/limits.conf 加一行 * soft core unlimited,或在 systemd 服务中设 LimitCORE=infinity
  • 别漏掉内核参数:/proc/sys/kernel/core_pattern 决定 core 文件名和位置,默认是 core,但若被改成 |/usr/lib/systemd/systemd-coredump(常见于 systemd 发行版),则 core 不落地为文件,而是走 coredumpctl —— 这时得用 coredumpctl dump 提取

gdb 能直接加载 core 文件吗?得匹配原二进制和调试信息

就算有 core.xxx,gdb ./myapp core.xxx 报错“not in executable format”或找不到符号,大概率是二进制变了或没调试信息。

  • 确保 gdb 加载的是**崩溃时运行的那个 exact 二进制**:重编译过、strip 过、甚至只是 relink 了,都可能导致栈帧无法解析
  • 编译时必须带 -g(推荐 -g -O0 开发期;上线可保留 -g 但开优化,只要不 strip)
  • 如果用 strip ./myapp 清除了符号,gdb 就只剩地址,看不到函数名和变量 —— 即便有 core 也基本没法查
  • 验证是否匹配:用 file ./myapp 和 file core.xxx 看架构一致;再用 readelf -n ./myapp | grep 'NT_PRSTATUS' 确认它确实含核心寄存器信息

core_pattern 配置错了,core 文件去哪了?

很多同学搜不到 core 文件,不是没生成,是写到别的地方去了,或者被管道吞掉了。

C++14
C++14

C++14 对 C++11 的修正与增强版本,适合旧系统维护和较老工具链兼容。

下载
  • 查真实路径:cat /proc/sys/kernel/core_pattern
  • 如果输出是 core 或 core.%e.%p 这类纯文件名,core 会生成在**进程当前工作目录**(不是源码目录,也不是 home,是 chdir() 后的位置,常是 / 或 /tmp)
  • 如果含 /(如 /var/crash/core.%e.%p),要确认该路径存在且进程有写权限(尤其 daemon 常以 nobody 运行)
  • 如果以 | 开头(如 |/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h),core 不落地,systemd 会接管并存进二进制格式 —— 此时用 coredumpctl list 查记录,coredumpctl dump -o mycore ./myapp 导出原始 core 文件

gdb 里看堆栈为什么全是 ?? ?注意符号和 shared library 路径

能打开 core,但 bt 显示一堆 ??,说明符号缺失或动态库没加载上。

  • 先 info sharedlibrary:看 gdb 是否识别到所有 so,状态列显示 Yes 才表示符号已读入;若为 No,说明路径不对或文件缺失
  • so 路径必须和崩溃时一致:用 ldd ./myapp 记下依赖路径,再在 gdb 里用 set solib-search-path /path/to/libs 或 set sysroot /(若跨环境调试)
  • 如果 so 是 dlopen 加载的,且没带 RTLD_GLOBAL,gdb 可能无法自动关联符号 —— 此时手动 add-symbol-file /path/to/libxxx.so 0x7ffff7bc0000(地址从 info proc mappings 里找)
  • 避免 strip system 库:strip --strip-unneeded /lib/x86_64-linux-gnu/libc.so.6 会导致所有基于它的 core 都丢 libc 符号,bt 一跳就断

实际调试时,最耗时间的往往不是 crash 现场本身,而是花半小时发现 core 其实被 systemd 拦截了,或者 gdb 加载的是三天前编译的旧 binary。路径、权限、符号、时间戳——四个点缺一不可。

C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!

相关文章

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

c++

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1709

3

python中的format是什么意思
python中的format是什么意思

python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.06.27

1211

7

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.18

5647

5

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2023.08.10

2448

6

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.18

5647

5

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2023.08.10

2448

6

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

4030

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3453

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2613

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C++ Core Guidelines
C++ Core Guidelines

共0课时 | 0人学习

C++ Reference
C++ Reference

共0课时 | 0人学习

C++ 官方标准说明
C++ 官方标准说明

共0课时 | 0人学习