我正在尝试调试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应该在执行时打破执行,但不会将控制返回给我。有什么东西我不见了吗?
答案 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()