多线程 python 脚本静默死亡 - 如何调试
Posted
技术标签:
【中文标题】多线程 python 脚本静默死亡 - 如何调试【英文标题】:Multithreaded python script silently dies - how to debug 【发布时间】:2011-02-16 20:28:44 【问题描述】:我有一个 python 脚本,它创建并启动 3 个线程,然后进入键盘中断捕获循环,以在按下 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调用一些可执行文件
【问题讨论】:
你能发布一些示例代码吗? 在 syslog 中查找段错误等? 【参考方案1】:python 中的段错误通常是由用 C 编写的模块中的错误引起的。解释器无能为力。
快速搜索发现导致段错误的常见问题是 1) 内存错误(但您应该会看到更多段错误 - 如果您怀疑这一点,请从 live CD 运行 memcheck),2) 安装损坏(尝试重新安装 python 和软件包,重新下载所有内容)和 3)错误(duh)。
先试试是1)还是2),然后看进程停在哪里,可以用strace
记录所有系统调用。这可能会给你一些关于正在发生的事情的其他线索(输出文件可能会变大):
strace -f python my_script.py > strace.out 2>&1
【讨论】:
以上是关于多线程 python 脚本静默死亡 - 如何调试的主要内容,如果未能解决你的问题,请参考以下文章