多线程Python脚本无声崩溃 - 如何调试
我有一个Python脚本,它创建并启动了三个线程,然后进入一个循环,等待用户按下Ctrl+C,这样就可以给线程发送停止信号。
这些线程的运行方法里有一个最外层的try-except结构,用来记录每个异常情况。同时,创建线程的代码也被包裹在try-except里,以便记录任何异常。
但是,这个脚本有时候会随机崩溃,有时一天后,有时一个小时后,完全没有记录任何异常。
这让我很头疼,因为我不知道该怎么调试这个问题。
大家有什么想法吗?
编辑:根据Luper的建议,我查看了系统日志,确实发现了一些信息。
python[27737]: segfault at 0 ip 0808e1d3 sp b662c5e0 error 4 in python2.5[8048000+fb000]
但我还是不知道接下来该怎么做。
至于代码,它并没有做什么复杂的事情,只是一些文件解析和在目录之间复制文件,还有通过os.system调用一些可执行文件。
1 个回答
2
在Python中,出现段错误(segfault)通常是因为某个用C语言写的模块里面有问题。解释器对此无能为力。
快速搜索一下发现,导致段错误的常见问题有三种:1)内存有问题(如果你怀疑是这个,可以使用live CD运行内存检查工具,通常会看到更多的段错误),2)安装损坏(可以尝试重新安装Python和相关的包,或者重新下载所有东西),3)程序本身的bug(这就不用说了)。
建议先检查第1种或第2种情况,然后可以用strace
这个工具来记录所有的系统调用,这样可以看看程序在哪个地方停止,这可能会给你一些其他的线索(输出文件可能会变得很大):
strace -f python my_script.py > strace.out 2>&1