python怎么在运行中查看执行状态_关于调试:查看正在运行的Python程序的方法

2023-05-16

是否可以在不中断的情况下找到有关当前运行的python程序正在做什么的任何信息?

另外,如果不可能的话,有没有可能让正在运行的python程序崩溃,这样我至少可以得到stacktrace(在Ubuntu上使用pydev)?

我知道我应该使用日志或者在调试模式下运行它,或者插入一条语句来运行调试程序…

相关问题

从正在运行的python程序获取堆栈跟踪——非常相似,但更一般的是,这个问题是为了调试正在运行的python程序。

澄清一下:你说的是一个正在运行的python程序,你需要在不重新启动它的情况下看看它在做什么,对吗?

另外,这是什么操作系统?

它被称为调试器。pydev有一个,按f11…

如果你放置

1

2import code

code.interact(local=locals())

在脚本的任何一点上,Python都将在该点上实例化一个python shell,该shell在该点上可以访问脚本状态下的所有内容。^ d退出shell并在该点之后继续执行。

甚至可以从shell、调用函数等修改该点的状态。

很好。我不知道(+1)

有趣。这与导入pdb;pdb.set_trace()有什么不同?

PDB提供了单步执行等功能,并且是它自己的特殊外壳,您必须学习如何使用它来控制整个程序的执行。code.interact()正是我们所熟知和喜爱的普通python shell。PDB功能更强大,而且通常杀伤力过大,除非你很清楚,否则很难使用。

对不起,不清楚。我无法修改脚本,因为它已经在运行

您检查脚本执行(我知道)的选项有:pdb或trace,但所有这些都需要能够修改脚本。我认为在脚本运行时不修改它是不可行的。

-1因为这回答了错误的问题

+1提供一种有趣的调试程序的方法,即使与问题无关。

如果您有一个运行中的python,它不是用任何类型的跟踪或日志机制构建的,并且您希望看到它在内部做什么,那么有两个选项:

在Solaris或Mac上,如果使用系统提供的python,则使用dtrace

使用gdb附加到正在运行的python进程,

DTrace很棒,不幸的是我在Ubuntu

要使具有stacktrace的python程序"崩溃",您可以发送sigint,即除非您捕获它或捕获keyboardinterrupt(默认情况下,python安装一个sigint处理程序,它会引发keyboardinterrupt)。

至于调试,Pydev是否有内置的调试支持(通过PDB)?

程序现在还在运行

这意味着您得到进程ID并执行'kill-int$pid'。这将杀死它,但应该给您一个堆栈跟踪。它确实假定您有某种方法可以看到stderr输出。

就个人而言,我更喜欢IPDB。这是PDB加上了IPython的优点。它看起来更像是一个交互式的Python解释器,有一些调试函数的快捷方式。

您可以使用lptrace。它就像用于Python程序的strace–它允许您附加到正在运行的Python进程,并打印它所做的每个函数调用。

如果您对崩溃感到满意,插入"1/0"将创建一个快速而脏的断点,并具有完整的回溯!

安装信号处理程序,该处理程序使用sys.settrace()设置跟踪函数,该函数打印跟踪并清除清除跟踪函数。这将允许您随时查看程序的位置,而不会中断程序。注意,该信号在每个sys.getcheckinterval()python指令之后处理。

或者让信号处理程序设置/取消设置跟踪,这样正常情况下就没有开销。

好的,我已经更新了答案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python怎么在运行中查看执行状态_关于调试:查看正在运行的Python程序的方法 的相关文章

随机推荐