1

我正在尝试调试 Python 子进程(使用多进程启动)。我只使用以下代码创建了一个更简单的项目,启动了远程调试器,然后启动了该项目。我希望 Eclipse 能够打破 settrace 语句。

import multiprocessing
import pydevd

def new_proc():
    print("New Procedure.")

    pydevd.settrace()
    print("After settrace.")

p = multiprocessing.Process(target=new_proc)
p.start()
p.join()

我看到了第一个打印语句的输出,但没有看到第二个,并且没有执行中断。

然后我用 False 发送 settrace() 的“suspend”参数。

import multiprocessing
import pydevd

def new_proc():
    print("New Procedure.")

    pydevd.settrace(suspend=False)
    print("After settrace.")

p = multiprocessing.Process(target=new_proc)
p.start()
p.join()

这一次,我按预期看到了两条消息。然后我在第二个打印语句上设置了一个断点,然后再次运行。现在,我不再看到第二条消息。

因此,看起来 Eclipse 在它应该的时候中断了执行,但没有将控制权交还给我。有什么我想念的吗?

4

1 回答 1

4

好吧,如果那是您的确切代码并且您在 Windows 上,那么问题是您没有正确设置多处理(您需要检查 freeze_support())...也就是说,前提是您正在启动远程调试器也正确: http: //pydev.org/manual_adv_remote_debugger.html

IE:

import multiprocessing
import pydevd

def new_proc():
    print("New Procedure.")

    pydevd.settrace()
    print("After settrace.")

if __name__ == '__main__':
    multiprocessing.freeze_support()

    p = multiprocessing.Process(target=new_proc)
    p.start()
    p.join()
于 2013-06-10T16:10:01.823 回答