CoreDump追踪
当程序运行的过程中异常终止或崩溃,操作系统会将程序当时的内存状态记录下来,保存在一个文件中,这种行为就叫做Core Dump(中文有的翻译成“核心转储”)。我们可以认为 core dump是“内存快照”,但实际上,除了内存信息之外,还有些关键的程序运行状态也会同时 dump 下来,例如寄存器信息(包括程序指针、栈指针等)、内存管理信息、其他处理器和操作系统状态和信息。core dump 对于编程人员诊断和调试程序是非常有帮助的,因为对于有些程序错误是很难重现的,例如指针异常,而core dump文件可以再现程序出错时的情景。
1、开启关闭coreDump
ulimit -c //查看是否打开此选项,若为0则为关闭;
ulimit -c 0 //手动关闭
ulimit -c 1000 //设置core文件大小最大为1000kulimit -c unlimited //设置core文件大小为不限制大小
2、修改core文件的名称和生成路径
默认生成的core文件保存在可执行文件所在的目录下,文件名为core,新的core文件生成将覆盖原来的core文件。
echo "/usr/data/core-%-%p-%t" > /proc/sys/kernel/core_pattern
程序崩溃后会在/usr/data目录下生成文件core-命令-pid-时间戳。

core_pattern接受的是core文件名称的pattern,它包含任何字符串,并且用%作为转移符号生成一些标示符,为core文件名称加入特殊含义。已定义的标示符有如下这些:
- %%:相当于%
- %p:相当于
- %u:相当于
- %g:相当于
- %s:相当于导致dump的信号的数字
- %t:相当于dump的时间
- %e:相当于执行文件的名称
- %h:相当于hostname
3、修改core文件的名称和生成路径 (通过代码)
#include
int main()
{/*设置路径,不设置有个默认路径*/string str = "echo '";str += "/usr/data/core";str += "' > /proc/sys/kernel/core_pattern";int n = system(str.toAscii().data());if(n != 0){cout<<"Core文件路径设置失败"<
3、程序崩溃后,使用gdb调试
- 将core文件放到工程目录,即生成可执行文件得目录下;
- 打开终端执行gdb 程序名 core文件名 ,例如:gdb a.out core;
- 然后一般再使用bt/where命令,即可查看程序崩溃得经过。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
