多线程python脚本无声地死掉 - 如何调试

时间:2010-05-07 13:39:52

标签: python multithreading crash

我有一个创建并启动3个线程的python脚本,然后转到KeyboardInterrupt-catch-loop,在按下ctrl + c时发送线程停止信号。

线程的run方法有一个顶级try-except,它记录每个异常,创建线程的顶级代码也被包装到try-except中以记录每个异常。

但剧本随机死亡,有时在一天之后,有时在一小时之后,没有任何异常被记录。

这让我发疯,因为我没有进一步的想法如何调试它。

任何想法的人?

编辑: 正如Luper建议查看syslog确实揭示了

python[27737]: segfault at 0 ip 0808e1d3 sp b662c5e0 error 4 in python2.5[8048000+fb000]

仍然不知道如何离开这里。

至于代码,它没有做任何花哨的事情,一些文件解析和目录之间的复制,并通过os.system调用一些可执行文件

1 个答案:

答案 0 :(得分:1)

python中的段错误通常是由用C编写的模块中的错误引起的。解释器无法做任何事情。

快速搜索显示导致段错误的常见问题是1)内存不良(但你应该看到更多的段错误 - 如果你怀疑这样就从live CD运行memcheck),2)安装损坏(尝试重新安装python和包) ,重新下载一切)和3)错误(杜)。

首先尝试1)或2),然后查看进程停止的位置,可以使用strace记录所有系统调用。这可能会给你一些其他的线索(输出文件可能会变大):

strace -f python my_script.py > strace.out 2>&1