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

时间:2009-10-26 13:53:10

标签: python eclipse debugging pydev waf

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

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

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

2 个答案:

答案 0 :(得分:4)

我似乎并不是PyDev可以做到的(PyDbg和WinDbg都没有),但看起来gdb可以:http://wiki.python.org/moin/DebuggingWithGdb

答案 1 :(得分:3)

我找到了一些可能对您有用的解决方法。

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

此外,您可以修改settrace调用,使其实际上不会暂停该过程:

import pydevd
pydevd.settrace(suspend=False)

因此,在子进程初始化的早期将代码插入到某处,你应该很好。还是有点黑客,但它肯定比手动方法更好。