gdb解决段错误实践

1146阅读 0评论2011-12-31 suanmeilizhi
分类:

    那句话怎么说的来着,祸不单行吧,在非常忙的时候,我之前一直在用的一个c程序,竟然给我报段错误,关键时刻掉链子,真是无语,没办法,gdb调试一下吧,还发现编译的时候没-g,我日啊。
    没办法,感觉可能是待处理的文件太大(17G)造成的,于是split成了22个文件,继续处理的时候,还是段错误,逼的没办法了,只好-g重新编译,祭出gdb,调试之,以下是大概过程:
gdb  handle_lastlog    启动gdb调试
set args test          设置程序运行时读取的文件
r 运行
bt 出现段错误时执行
up 0  进入段错误时的现场
info locals 看看当时的变量信息,这样就不用一个一个print了,比较方便。


查看了各个变量后,问题很明显,是有一个变量越界了,取到是负值,在接下来用这个值做文件描述符的地方,write的时候报了段错误。
    知道原因后,修改就很简单了,只需要给这个变量加个abs即可。

    之前看同事用过gdb查找段错误,当时我把这个技巧记录了下来,终于在昨晚发挥了用处,能解决这个问题真是太好了,很难想象在当时那么忙、那么多紧急的事情下,如果没有这个积累,再从头去google,会浪费多少时间,好了,这是第一次用gdb用的这么爽,希望我的python之旅能够比c更顺利。
上一篇:如何查看僵死进程??
下一篇:关于system()实现中阻塞sigchld信号的问题(转帖)