linux上程序崩溃起来挺烦人,不过linux 比较好的是有gdb.
1、生成coredump文件
echo "ulimit -c unlimited" >> /etc/profile
然后记得敲入命令
source /etc/profile
然后敲入命令:
ulimit –c
效果如下:
确认能否生成coredump文件,使用如下命令(使用时注意,我在测的时候会直接退出当前用户)
kill -s SIGSEGV $$
然后回到执行上述命令的路径下即可看到coredump文件,我这边生成的文件名为core.3477,依个人会随机生成不同的数字。
2、调试coredump文件
调试方式为: gdb program coredump文件
例如我的可执行文件为test, 生成的coredump文件为core.3533,则命令如下:
gdb test core.3533
显示如下图所示:
嗯,有的人运气好,直接就显示源代码了,如果你像我一样,接着用下面的命令
backtrace
打印堆栈信息。
我们看到最接近崩溃的地方在第8行
然后调用命令
frame 8
直接找到源代码的位置:
详细操作如下:
1、gdb core文件 -- 启动gdb对core文件的分析
2、(gdb) where -- 查看程序出问题的地方
3、(gdb) b 41 -- 在GdbDebug.c文件第41行设立断点
4、(gdb)info b -- 显示断点信息
5、(gdb) r -- 运行GdbDebug
6、(gdb) n -- 执行下一步
7、(gdb) p iLen -- 打印(输出)iLen(参数)的值
8、(gdb) c -- 继续执行
9、当提示Program received signal SIGSEGV, Segmentation fault. -- 程序core掉了
10、(gdb) q -- 退出gdb