写程序经常会遇到这样一个错误: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,就会出现错误的位置。如下图
0就是错误的具体位置。具体错误可以从#3到#0来找。这里的错误是fseek第一个参数为0x0,也就是说,文件指针为NULL。再看代码,发现原来文件指针没有释放掉,所以在之后的访问同样文件时,发生了错误。
由此可见,这种调试的方法还是不错的。