python - 调试:如何检查我的 Python 程序卡在哪里?

标签 python debugging trace

我编写并运行了一个相当大的 Python 程序,但有时,在运行数分钟或数小时后,在一个不容易重现的时刻,挂起并且不向屏幕输出任何内容。

我不知道它在那一刻在做什么,也不知道它在代码的哪一部分。

我如何在调试器或其他工具中运行它以查看程序挂起时正在执行的代码行?

它太大了,无法在各处放置“打印”语句。

我做到了:

python -m trace --trace /usr/local/bin/my_program.py

但这给了我太多的输出,我真的看不到任何东西,只有数百万行在屏幕上滚动。

如果我可以用“kill -SIGUSR1”或其他东西向程序发送一些信号,那最好是程序会进入调试器并向我显示它停止的行,并可能允许我单步执行然后程序。

我试过:

pdb usr/local/bin/my_program.py

然后:

(Pdb) cont

但是当它挂起时我该怎么做才能看到我在哪里? 它不会抛出异常,只是看起来像是在等待某事,可能是在无限循环中。

更多细节:当程序挂起时,我按 ^C 然后(不确定是否有必要)程序正常继续(没有抛出任何异常,也没有在屏幕上给我任何提示为什么它停止了) .

最佳答案

This could be useful to you.我经常这样做

>>> import pdb
>>> import program2debug
>>> pdb.run('program2debug.test()')

我通常会在我的程序中添加一个 -v 选项,这样可以生成大量的打印语句来详细解释我在做什么。当您将来编写程序时,请考虑在它变得数千行之前做同样的事情。

关于python - 调试:如何检查我的 Python 程序卡在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5145868/

相关文章:

python - 将字典列表的字典转换为数据框

android - 我如何设置Android :Debuggable false

windows性能记录器记录具体过程

c++ - 如何启用BDS2006的C++ WARN & TRACE宏

mysql - 跟踪从 MS Access 到 MySQL 的 SQL 调用

python - 只能将元组(不是 "int")连接到元组

python - PyBrain 网络中所有节点的激活值

python - 什么是不推荐使用的方式来做 `new.classobj(name, (base_class,), my_dict)`

c - 终端中带有 C 的文本文件

android - Android 中 libgnuSTL_shared.so 中的段错误