使用gdb和core dump迅速定位段错误
关键字:gdb、段错误、core dump
一、什么是core dump
core:内存、核心的意思;
dump:抛出,扔出;
core dump:前提:当某程序崩溃的一瞬间,内核会抛出当时该程序进程的内存详细情况,存储在一个名叫core.xxx(xxx为一个数字,比如core.699)的文件中。
二、更改生成的core文件的大小限制
可见,core文件是内核生成的,那某一个进程因为段错误而崩溃的时候的内存映像很大,那必然会生成一个很大的core文件,所以我们可以通过ulimit命令来设置生成core文件的大小,例如$ulimit -c unlimited,这里就是设置生成的core文件无大小限制。
三、生成core文件
当第二步完成了,就运行一次那个有问题的程序,然后自然就会因为段错误而崩溃,在当前目录下就生成了core.xxx文件。
四、分析core文件
使用命令$gdb 程序名 core.xxx,然后再输入where就可以看到产生段错误的地方。
五、实例分析
1.test.c文件的源代码
1 void do_it();
2 int main()
3 {
4 do_it();
5 return 0;
6 }
7 void do_it()
8 {
9 char* p = 1; //定义一