我编写并运行了一个相当大的 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/