gdb调试Segmentation fault经验总结

47 篇文章 0 订阅

from http://blog.sina.com.cn/s/blog_7ce2cb410100rmy4.html

当程序发生Segmentation fault的时候,大多数时候可以用printf就能搞定。

    但有时候可能遇到比较复杂的情况:比如,程序是已经执行完我们自己写的程序的最后一句代码了才Segmentation fault。这种情况printf就无用。就要请出大名鼎鼎的gdb了

 

    下面是用gdb 找Segmentation fault的大致方法。适用于可执行程序和库。我的系统是Ubuntu 10

 

    1.在终端上执行

      ulimit -c 1000

    2.编译程序或库,要加-g -rdynamic

    3.运行程序,Segmentation fault会发生,同时也产生一个core文件

    4.执行 gdb test core。就会提示出现Segmentation fault的位置,例如

    #0  0x00922ff4 in xx () from /usr/lib/libtest.so

 

    一些注意:

    1. ulimit的值是对每终端有效,如果执行了一次ulimit -c VALUE以后,想重新把这个值改大一点,要重新打开一个新终端设置。

    2. 如果gdb没有明确提示Segmentation fault的位置,比如,它这样show

       #0  0x00922ff4 in ?? () from /usr/lib/libtest.so 

       这真叫人沮丧的,前面忙活了半天,最想看的却看不到。

       咋办?

       1). 执行一下bt命令,也许回有意外收获

       2). 检查编译的时候是不是加了-g -rdynamic

    3. 有些Segmentation fault来得太猛烈了,core文件还没产生完整程序就退出了。这时候即使用gdb test core也看不到出错点。咋办?

    我的经验是多执行几次你的程序,一定要让core文件完整产生。每产生一次,就用gdb test core去试,总有成功的时候。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值