linux 下gdb调试

linux上程序崩溃起来挺烦人,不过linux 比较好的是有gdb.

1、生成coredump文件

echo "ulimit -c unlimited" >> /etc/profile

然后记得敲入命令

source /etc/profile

然后敲入命令:

ulimit –c

效果如下:

image

确认能否生成coredump文件,使用如下命令(使用时注意,我在测的时候会直接退出当前用户)

kill -s SIGSEGV $$

然后回到执行上述命令的路径下即可看到coredump文件,我这边生成的文件名为core.3477,依个人会随机生成不同的数字。

2、调试coredump文件

调试方式为: gdb program coredump文件

例如我的可执行文件为test, 生成的coredump文件为core.3533,则命令如下:

gdb test core.3533

显示如下图所示:

image

嗯,有的人运气好,直接就显示源代码了,如果你像我一样,接着用下面的命令

backtrace

打印堆栈信息。

image

我们看到最接近崩溃的地方在第8行

然后调用命令

frame 8

直接找到源代码的位置:

image

详细操作如下:

 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

猜你喜欢

转载自blog.csdn.net/fsfsfsdfsdfdr/article/details/82560221