coredump配置调试
1.介绍
程序异常退出时,会产生一个core文件,该文件记录了程序运行时的内存,寄存器状态,堆栈指针,内存管理信息还有各种函数调用堆栈信息等,我们可以理解为是程序工作当前状态存储生成的一个文件,通过工具分析这个文件,我们可以定位到程序异常退出的时候对应的堆栈调用等信息,找出问题所在并进行及时解决。
2.设置core文件生成的目录
如果不设置,默认会在当前的目录生成一个core文件。
那为什么我们的程序异常了,怎么没生成呢,是因为还有东西没设置,通过命令ulimit -a看一下:
ulimit -a
file size为0,所以不生成,需要修改:
ulimit -c unlimited
不过这种方法只在当前的命令框有效,要想永久有效,需要设置:
/etc/security/limits.conf
这种方法好像不起作用。
不能产生core文件到指定路径的原因主要是:
(1)ulimit -c的大小,不能为0
(2)指定的路径是否正确,并要有权限
3.测试
写一段有问题的代码:
#include<stdio.h>
int main(){
char *p = NULL;
*p = 0;
return 0;
}
生成了core文件:
当然做工程还是要把core文件放在专门的目录下,命名也修改一下:
echo /corefile/core-%e-%p-%t >/proc/sys/kernel/core_pattern
前提/corefile目录存在,并且有写入权限,其中%e表示程序文件名,%p表示进程ID,%t是时间戳。
4.调试
在编译的时候加上-g,出现core文件进行调试: