10

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

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

我知道远程调试模式,但这很不方便,因为我必须在远程进程中手动调用调试器。如果有人知道一种方法来做我想做的事情,那将不胜感激。

4

2 回答 2

4

我似乎 PyDev 做不到(PyDbg 和 WinDbg 也做不到),但看起来 gdb 可以:http ://wiki.python.org/moin/DebuggingWithGdb 。

于 2009-10-27T14:43:46.570 回答
3

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

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

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

import pydevd
pydevd.settrace(suspend=False)

所以在子进程初始化的早期插入上面的代码,你应该很好。仍然有点破解,但它绝对比手动方法更好。

于 2010-10-08T15:44:25.237 回答