写在前面:今天做gdb的练习时发现我的linux居然不生成core文件,后来研究了一下。
检查以后发现原因是 core 文件最大尺寸(用 ulimit -c 查看)是 0,把它设置成非 0 值就可以了,如:
ulimit -c 2048(设置 core 文件最大尺寸为 2048 blocks,1block=512bytes,因此这里设置的其实是 1MiB)
ulimit -c unlimited(不限 core 文件尺寸)
附:用 gdb 根据 core dump 文件定位错误的办法。
用这个程序作一个测试:
int foo (int *p)
{
}
main()
{
}
derek@dli: /tmp $ gcc -g a.c
derek@dli: /tmp $ ./a.out
段错误 (core dumped)
derek@dli: /tmp $ gdb ./a.out -c core
(这里略去约十行其他信息)
Core was generated by `./a.out'.
Program terminated with signal 11, Segmentation fault.
#0 0x0804834a in foo (p=0x0) at a.c:3
3
如果再输入一条命令 bt,就可以看得清清楚楚错误是在什么时机产生的:
(gdb) bt
#0 0x0804834a in foo (p=0x0) at a.c:3
#1 0x0804836b in main () at a.c:8