查找正在运行的Python进程的当前行号

11

我有一些长时间运行的Python程序,但是这些程序没有足够的内部日志记录。我希望能够连接到正在运行的Python程序,并查找其当前行号。理想情况下,我希望在不中断其执行的情况下进行操作,但如果需要,我也可以让程序暂停、打印堆栈跟踪信息,然后继续执行。

我可以很容易地按下control-C键,但那样会终止程序。

是否有任何方法可以实现这一点?


如果您可以接受调试式的方法,请尝试使用pdb - https://docs.python.org/3/library/pdb.html - Jim Todd
1
谢谢。如果您在pdb下启动程序,它会很好地工作,但似乎无法附加到正在运行的Python程序或执行内省。 - vy32
1个回答

9
看起来py-spy就是你要找的东西。
它可以连接到正在运行的进程,而无需进行修改,并通过使用以下命令显示其当前操作:
py-spy dump --pid 12345

2
就是py-spy!谢谢! - vy32
请注意,它确实会“修改”正在运行的进程,因为它会暂停进程以读取其在一致状态下的操作。为了避免这种情况,例如如果您的进程似乎无论如何都卡住了(在我的情况下,它在标准库的某个网络读取处卡住了,所以堆栈不会改变),您可以使用py-spy dump --nonblocking --pid 12345 - Luc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接