如何发现程序中的段错误?

如何发现程序中的段错误?

有个网友对这个做了比较全面的总结,除了感谢他外,我把地址弄了过来。文章名字叫《段错误bug的调试》

(http://www.cublog.cn/u/5251/showart.php?id=173718),应该说是很全面的。

而我常用的调试方法有:

1)在程序内部的关键部位输出(printf)信息,那样可以跟踪 段错误 在代码中可能的位置

为了方便使用这种调试方法,可以用条件编译指令#ifdef DEBUG和#endif把printf函数给包含起来,编译的时候加上-DDEBUG参数就可以查看调试信息。反之,不加上该参数进行调试就可以。

2)用gdb来调试,在运行到段错误的地方,会自动停下来并显示出错的行和行号

这个应该是很常用的,如果需要用gdb调试,记得在编译的时候加上-g参数,用来显示调试信息,对于这个,网友在《段错误bug的调试》文章里创造性的使用这样的方法,使得我们在执行程序的时候就可以动态扑获段错误可能出现的位置:通过扑获SIGSEGV信号来触发系统调用gdb来输出调试信息。如果加上上面提到的条件编译,那我们就可以非常方便的进行段错误的调试拉。

3)还有一个catchsegv命令
通过查看帮助信息,可以看到
Quote:

Catch segmentation faults in programs

这个东西就是用来扑获段错误的,不过打印出来的是一些register里头的东西,“看不太懂”。

到这里,“初级总结篇”算是差不多完成拉。欢迎指出其中表达不当甚至错误的地方,先谢过!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值