PyDev和settrace默默地打破

时间:2013-06-10 02:39:27

标签: python eclipse debugging pydev multiprocess

我正在尝试调试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()

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

然后我使用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()

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

因此,看起来Eclipse应该在执行时打破执行,但不会将控制返回给我。有什么东西我不见了吗?

1 个答案:

答案 0 :(得分:4)

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

I.e。:

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()