[英]debugging: how to check what where my Python program is hanging?
我编写的一个相当大的Python程序可以运行,但是有时,在运行数分钟或数小时后,在不容易再现的瞬间,它挂起并且没有任何输出到屏幕。
我当时不知道它在做什么,它在代码的哪一部分。
如何在调试器或其他工具中运行此程序,以查看程序在挂起时正在执行哪些代码行?
它太大,无法在各处放置“打印”语句。
我做了:
python -m trace --trace /usr/local/bin/my_program.py
但这给了我很多输出,我什至看不到任何东西,只有几百万行在屏幕上滚动。
最好的情况是,我可以使用“ kill -SIGUSR1”或类似的命令向程序发送一些信号,然后程序会进入调试器并向我显示它停止的那一行,并可能允许我逐步执行该程序,然后。
我试过了:
pdb usr/local/bin/my_program.py
然后:
(Pdb) cont
但是当挂起时我该怎么做呢? 它不会引发异常,就像它在等待某些东西一样,可能处于无限循环中。
更详细一点:当程序挂起时,我按^ C键,然后(不确定是否有必要)该程序正常运行(没有引发任何异常,并且没有在屏幕上提示我为什么停止)。
这对您可能有用。 我通常会
>>> import pdb
>>> import program2debug
>>> pdb.run('program2debug.test()')
通常,我会在程序中添加-v
选项,从而启用大量的打印语句来详细说明我的操作。 将来编写程序时,请考虑先做同样的事情,然后再增加数千行。
您可以尝试在像devdev(eclipse)或pycharm这样的IDE中以调试模式运行它。 您可以随时中断程序并转到其当前执行点。
没有哪个程序太大,无法在各处放置打印语句。 您需要阅读logging
模块并插入大量logging.debug()
语句。 这只是输出到文件的打印语句的一种更好形式,可以在生产软件中轻松关闭它。 但是从现在开始,多年后,当您需要修改代码时,您可以轻松地将其重新打开,并从原始程序员的见解中受益。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.