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

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

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

有帮助吗?

解决方案

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

其他提示

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

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

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

import pydevd
pydevd.settrace(suspend=False)

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top