写在前面:今天做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
本文介绍了如何解决Linux系统中core文件大小设置为0导致无法生成的问题,并详细阐述了使用gdb根据coredump文件定位错误的方法。通过设置ulimit-c参数调整core文件大小限制,并利用gdb的bt命令清晰显示错误发生的具体位置。
2833

被折叠的 条评论
为什么被折叠?



