【问题标题】:How to use ipdb.set_trace in a forked process如何在分叉进程中使用 ipdb.set_trace
【发布时间】:2014-12-05 00:24:48
【问题描述】:

每当我需要在我的代码中设置断点时,我都会使用ipdb.set_trace()。现在,我正在尝试在使用multiprocessing 创建的进程中使用它,虽然代码确实停止了,但我无法输入任何内容来继续调试。有什么方法可以正确引导我的stdin

理想情况下,我想想象每次分叉进程停止调试时都会打开一个新控制台,但我认为这是不可能的。

【问题讨论】:

  • 如果您验证@yoav-glazner 给出的答案,那就太好了。用 dummy 更改 multiprocessing 后,您可以使用键盘了吗?。
  • @jgomo3 我已经确认它确实有效,但我(个人)觉得它不能回答我的问题
  • 我想是因为每次要调试时都必须更改代码。有人可能会争辩说你已经用 pdb.set_trace() 做到了,但我知道你认为应该有另一种方法来实现同样的目标,而无需更改代码。我想知道是否有办法告诉 pdb 使用 dummy 而不是 multiprocessing 进行多处理导入?一种用于调试的猴子补丁/模拟。

标签: python multiprocessing ipython pdb ipdb


【解决方案1】:

有时用于调试您可以更改代码以使用 multiprocessing.dummy 。这样,就不会进行分叉,它会与线程一起工作,并且更容易调试。

稍后(在修复错误之后...)您可以切换回 multiprocessing

multiprocessing.dummy - 应该提供与多处理相同的 API,以便轻松更改...

【讨论】:

    【解决方案2】:

    根据How to attach debugger to a python subproccess?http://winpdb.org支持multiprocessing调试。

    如果您希望做更多的工作以获得更大的灵活性,https://gist.github.com/csabahenk/6497709 有一些有趣的想法(太长,无法在此处包含)。

    【讨论】:

    • 您在 python3 应用程序上尝试过 WinPDB 吗?在我看来,它只对调试 python2 程序有用
    猜你喜欢
    • 1970-01-01
    • 2012-05-05
    • 2015-02-03
    • 1970-01-01
    • 2012-04-19
    • 1970-01-01
    • 2012-02-27
    • 1970-01-01
    • 2014-07-19
    相关资源
    最近更新 更多