我正在尝试调试 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()
我看到了第一个打印语句的输出,但没有看到第二个打印语句的输出,并且没有执行中断。
然后我向 settrace() 发送了带有 False 的“暂停”参数。
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 似乎在应该中断执行时中断了执行,但没有将控制权返回给我。有什么我想念的吗?
最佳答案
好吧,如果那是你的确切代码并且你在 Windows 上,问题是你没有正确设置多处理(你需要检查 freeze_support())...也就是说,假设你也正确启动了远程调试器:http://pydev.org/manual_adv_remote_debugger.html
即:
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()
关于python - PyDev 和 settrace 默默地打破,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17016207/