如何调试导致python崩溃的python脚本

Posted

技术标签:

【中文标题】如何调试导致python崩溃的python脚本【英文标题】:How to debug python script that is crashing python 【发布时间】:2014-10-29 23:59:56 【问题描述】:

我正在尝试帮助调试导致 python (2.7) 本身崩溃的 python 脚本。

该脚本将一些信息记录到一个文件中,并在每次运行时在不同的停止点结束,或者至少它写出的内容在不同的位置。 脚本已经有一个 try\catch 的。 该脚本之前运行正常,没有错误 这是在 Window 2008 服务器上,具有相当多的 RAM,运行时 CPU 使用量不大。

所以我的问题:

是否有可以提供帮助的工具或技术? 我看到可以导入一个 pdb 模块,但不确定这是否有助于解决此问题。 当 py 脚本使 python 本身崩溃时,您将如何调试它?

GB

【问题讨论】:

硬件问题?因为您使用的是不安全的多线程代码,所以出现了一些模糊的竞争条件? Python安装损坏?损坏的外部库?如果它总是在不同的位置崩溃,它可以是任何东西...... 【参考方案1】:

所以日志中没有异常?它只是在不同的地方随机退出?

要查看每条语句的执行情况,请使用trace 模块:

python -u -m trace -t program.py

要在调试器中运行程序,请使用pdb:

python -m pdb program.py

通过这两个,您应该能够看到它是否是程序中导致它退出的东西。如果你没有看到任何证据或模式,那么它可能是程序之外的东西导致它死亡。

在 Linux 上,我也会尝试使用 strace 运行程序并观察 OOM 杀手或段错误。不知道在 Windows 中会有哪些类似的步骤,Windows 没有 OOM 杀手。

【讨论】:

我建议将 pdb 替换为 PuDB。它是纯控制台调试器和更像 IDE 的调试器之间的完美混合,所有这些都在控制台环境中。在 Windows 上,对于内存,它可能类似于 Resource Monitor 或更高级的 Process Monitor。

以上是关于如何调试导致python崩溃的python脚本的主要内容,如果未能解决你的问题,请参考以下文章

如何从命令行调试使用 python -m 运行的 Python 模块?

python Debug

Python:未知的 Jinja 错误导致脚本无法运行

Python Cookbook(第3版)中文版:14.12 调试基本的程序崩溃错误

我的 urls.py 文件有啥问题? Python速成班第18章

如何调试静默崩溃?多处理 python