1.介绍

      程序异常退出时,会产生一个core文件,该文件记录了程序运行时的内存,寄存器状态,堆栈指针,内存管理信息还有各种函数调用堆栈信息等,我们可以理解为是程序工作当前状态存储生成的一个文件,通过工具分析这个文件,我们可以定位到程序异常退出的时候对应的堆栈调用等信息,找出问题所在并进行及时解决。

2.设置core文件生成的目录

  如果不设置,默认会在当前的目录生成一个core文件。

那为什么我们的程序异常了,怎么没生成呢,是因为还有东西没设置,通过命令ulimit -a看一下:

ulimit -a

coredump配置调试

file size为0,所以不生成,需要修改:

ulimit -c unlimited

coredump配置调试

 不过这种方法只在当前的命令框有效,要想永久有效,需要设置:

/etc/security/limits.conf

coredump配置调试 

这种方法好像不起作用。

不能产生core文件到指定路径的原因主要是:

(1)ulimit -c的大小,不能为0

(2)指定的路径是否正确,并要有权限

3.测试

 写一段有问题的代码:

#include<stdio.h>
int main(){
  char *p = NULL;
  *p = 0;
  return 0;
}

coredump配置调试

生成了core文件:

coredump配置调试

 当然做工程还是要把core文件放在专门的目录下,命名也修改一下:

echo /corefile/core-%e-%p-%t >/proc/sys/kernel/core_pattern

前提/corefile目录存在,并且有写入权限,其中%e表示程序文件名,%p表示进程ID,%t是时间戳。

coredump配置调试

 4.调试

在编译的时候加上-g,出现core文件进行调试:

coredump配置调试

相关文章: