检查正在运行的进程:打印未插桩Python程序的堆栈跟踪

26 投票
8 回答
14961 浏览
提问于 2025-04-16 22:23

在Linux上,有没有办法查看一个正在运行的Python守护进程在做什么?也就是说,不用修改代码,也不想把它结束掉?我希望能知道当前运行的是哪个模块,以及在这个模块中的哪一行。

一些常规的调试工具,比如strace、pstack和gdb,对于Python代码来说并不是很有用。大多数堆栈信息只包含一些解释器的函数,比如PyEval_EvalFrameEx和PyEval_EvalCodeEx,这些并不能告诉你执行到.py文件的哪一部分。

8 个回答

2

winpdb 让你可以 连接到一个正在运行的 Python 程序,但要做到这一点,你需要这样启动 Python 程序:

 rpdb2 -d -r script.py

然后,在设置好密码后:

A password should be set to secure debugger client-server communication.
Please type a password:mypassword

你就可以打开 winpdb,选择 文件 > 连接到 (或者 文件 > 断开连接) 这个程序。

4

py-spy(https://github.com/benfred/py-spy)是一个很有用的工具,可以用来查看正在运行的Python程序。特别是,py-spy dump这个命令会显示每个线程的调用栈信息,包括函数名、文件名和行号。

11

显示正在运行的Python应用程序的堆栈跟踪这个问题中,有一些答案适用于这种情况:

撰写回答