有没有办法调试在 `multiprocessing.Process` 上运行的 Python 代码?

4 投票
3 回答
2034 浏览
提问于 2025-04-16 07:43

我想要的是能够逐步调试在一个独立进程中运行的代码,这个代码是用multiprocessing这个包写的。

我记得大约一年前我也在找这个解决方案,但没找到。当时有人告诉我只要多做一些日志记录,但这显然不是个好办法。那么,也许在这段时间里,有人想出了什么解决方案?比如,有没有什么方法可以让新创建的进程和调试器连接起来?

3 个回答

0

与其通过进程来启动你的函数或类,不如直接调用它,然后像平常一样进行调试。

1

你可以手动开始这个过程,自己去调试,而不是通过这个过程的接口来操作。

1

你可能会觉得 WingIDE 很有用。它的调试工具非常好用,甚至可以支持远程调试,只需要对要调试的代码做一些简单的修改。虽然它不是免费的,但我觉得花这个钱是值得的。(我和Wingware没有任何关系,只是一个满意的用户…)

要在Wing中启用远程调试,你需要把文件 wingdbstub.py 复制到你想调试的应用程序的同一个文件夹里,然后在你代码中想要开始调试的地方导入它。(这个在 WingIDE文档中有详细说明。)

如果你拿 这个例子,并把 myfunc() 方法修改成如下形式:

def myfunc(conn, commands):
    import wingdbstub
    # ... remainder same as original example

你应该可以启动WingIDE,在 import 这一行后面设置一个断点,然后从控制台运行这个示例脚本。它应该会自动连接到Wing,并在你的断点处暂停。

如果你在连接调试时遇到问题,可以参考 这篇帖子,可能会对你有帮助。(WingIDE的文档也对连接问题进行了不错的说明。)

撰写回答