segmentation fault (core dumped) 调试

写程序经常会遇到这样一个错误:segmentation fault (core dumped)。怎么去解决呢?

首先,就是要知道错误发生的地方。而Linux系统可以产生core文件,配合gdb就可以解决这个问题。

第一步,让系统在信号中断造成的错误时产生core文件

ulimit -c unlimited // 设置core大小为无限

ulimit unlimited //设置文件大小为无限

第二步,编译运行与原来的程序

gcc -o XXX XXX.c -g

./XXX

运行后, ls 发现多出来了core文件

第三步, 用gdb查看core文件

gdb XXX core

然后,输入bt,就会出现错误的位置。如下图

segmentation fault (core dumped) 调试_第1张图片


0就是错误的具体位置。具体错误可以从#3到#0来找。这里的错误是fseek第一个参数为0x0,也就是说,文件指针为NULL。再看代码,发现原来文件指针没有释放掉,所以在之后的访问同样文件时,发生了错误。

由此可见,这种调试的方法还是不错的。

你可能感兴趣的:(c/c++)