代码之家  ›  专栏  ›  技术社区  ›  jkp

有没有使用pydev调试子进程的方法?

  •  10
  • jkp  · 技术社区  · 15 年前

    我正在使用eclipse/pydev试图找到一种调试使用 subprocess.Popen 创建子进程:我希望能够调试创建的子进程。问题是我找不到一种跨进程边界调试的方法,我猜想这实际上是不可能的。不过,除非你问,否则你永远不会知道,所以我就这么做!

    有点背景:我有一个复杂的构建过程,由 Waf 通过调用 nose 根据需要:我想钩住这些进程来调试单元测试失败。我知道我可以尝试直接运行nose,但问题是我必须为模块正确加载配置的环境相当复杂,如果我可以避免的话,我不想复制代码来实现这一点。

    我知道 remote debugging 但是这非常不方便,因为我必须在远程进程中手动调用调试器。如果有人知道做我想做的事情的方法,我会非常感激的。

    2 回复  |  直到 15 年前
        1
  •  4
  •   Raphaël Saint-Pierre    15 年前

    我觉得Pydev做不到(Pydbg和Windbg也做不到),但看起来gdb可以: http://wiki.python.org/moin/DebuggingWithGdb .

        2
  •  3
  •   pimlottc    14 年前

    我找到了一个可以帮你解决问题的方法。

    和您一样,我首先找到了远程调试选项,可以在所需的断点手动插入对pydevd.settrace()的调用。但我也注意到,随后的pydev断点(即通过单击左边距创建的断点)都得到了遵守。因此,您似乎只需要第一个显式的setrace调用来为进程建立远程调试会话,然后只需要使用普通的调试器断点。

    此外,您可以修改setrace调用,这样它就不会真正挂起进程:

    import pydevd
    pydevd.settrace(suspend=False)
    

    因此,在子进程初始化的早期,将上面的代码插入到某个地方,您应该是好的。还是有点黑客,但肯定比手工方法好。