From: http://blog.csdn.net/wj_j2ee/article/details/7161586
1. 内核转储作用
(1) 内核转储的最大好处是能够保存问题发生时的状态。
(2) 只要有可执行文件和内核转储,就可以知道进程当时的状态。
(3) 只要获取内核转储,那么即使没有复现环境,也能调试。
2. 启用内核转储
1.1 查看内核转储是否有效
在终端中输入以下命令,查看内核转储是否有效。
#ulimit -c
0
-c 表示内核转储文件的大小限制,现在显示为零,表示不能用。
可以改为1G
#ulimit -c 1073741824
也可以改为无限制
#ulimit -c unlimited
2.2 测试一个例子
例子的源代码:
#include
int main(void)
{
int *a = NULL;
*a = 0x1;
return 0;
}
把以上源代码,写成一个a.c文件后,编译a.c文件产生一个a.out的可执行文件:
#gcc -g a.c -o a.out
修改a.out文件的权限后,执行它:
#./a.out
就会显示:
Segmentation fault(core dump)
这表示在当前目录下, 已经生成了a.out对应的内核转储文件。
注意:后面带有(core dump), 才说明转储文件成功生成了。
#file core*
core:ELF 64-bit LSB core file x86-64, version 1(SYSV), SVR4-style, from './a.out'
coreDump: UTF-8 Unicode C program text
要用GDB调试内核转储文件,应该使用以下方式启动GDB:
#gdb -c ./*.core ./a.out
GNU gdb (GDB) 7.1-Ubuntu
...
Core was generated by './a.out'.
Program terminated with signal 11, Segmenta