没办法,感觉可能是待处理的文件太大(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更顺利。