有没有办法用pydev调试子进程?
我在使用Eclipse和PyDev,想找到一种方法来调试使用subprocess.Popen
创建子进程的代码:我希望能够调试这个子进程。但是问题是,我找不到跨进程调试的方法,我猜这实际上可能是不可能的。不过,还是问问看,总是好的!
稍微介绍一下背景:我有一个复杂的构建过程,是通过Waf来驱动的,它会根据需要调用我们的单元测试,使用nose。我想在这些过程中插入调试,以便找出单元测试失败的原因。我知道可以直接运行nose,但问题是,我需要为我们的模块配置一个相当复杂的环境,如果可以避免的话,我不想重复写这部分代码。
我知道有远程调试模式,但这很麻烦,因为我需要手动在远程进程中启动调试器。如果有人知道如何实现我想做的事情,我将非常感激。
2 个回答
3
我找到了一种可能对你有用的解决办法。
和你一样,我最开始也是通过手动插入pydevd.settrace()来设置调试点。可是我发现,之后在PyDev中点击左边的边距创建的调试点也能正常工作。所以看起来,你只需要第一次明确调用settrace来建立远程调试会话,之后就可以用普通的调试点了。
而且,你可以修改settrace的调用,让它不会暂停进程:
import pydevd
pydevd.settrace(suspend=False)
所以把上面的代码放在子进程初始化的早期位置就可以了。虽然这还是有点小技巧,但总比手动的方法要好。
4
看起来PyDev做不到这个(PyDbg和WinDbg也不行),但是gdb好像可以做到:http://wiki.python.org/moin/DebuggingWithGdb。