CoreDump追踪

当程序运行的过程中异常终止或崩溃,操作系统会将程序当时的内存状态记录下来,保存在一个文件中,这种行为就叫做Core Dump(中文有的翻译成“核心转储”)。我们可以认为 core dump是“内存快照”,但实际上,除了内存信息之外,还有些关键的程序运行状态也会同时 dump 下来,例如寄存器信息(包括程序指针、栈指针等)、内存管理信息、其他处理器和操作系统状态和信息。core dump 对于编程人员诊断和调试程序是非常有帮助的,因为对于有些程序错误是很难重现的,例如指针异常,而core dump文件可以再现程序出错时的情景。 

1、开启关闭coreDump

ulimit -c     //查看是否打开此选项,若为0则为关闭;
ulimit -c 0  //手动关闭
ulimit -c 1000    //设置core文件大小最大为1000k

ulimit -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文件名称加入特殊含义。已定义的标示符有如下这些:

  1. %%:相当于%
  2. %p:相当于
  3. %u:相当于
  4. %g:相当于
  5. %s:相当于导致dump的信号的数字
  6. %t:相当于dump的时间
  7. %e:相当于执行文件的名称
  8. %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命令,即可查看程序崩溃得经过。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部