繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM