我试图使用ipdb作为脚本来调试其他脚本。
例如:
python3 -m pdb myscript.py
使用multiprocessing.process
,如果要调试的程序异常退出,我希望pdb自动进入事后调试附加到子进程。
但是,当我只运行python3 -m pdb myscript.py
时,尽管它在某个时刻升起并挂起而没有退出,但没有进入post_mortem
模式。
更新
我发现,可能的问题是子进程在其同级中的任何一个引发未处理的异常并挂在post_mortem模式下时不会停止。 所以我想要的是,如果父进程或子进程中的任何一个停止,则所有进程都将完全停止。
我猜这部分代码产生过程很麻烦。 如果是这样,我应该如何更改它以使其按需工作?
for pid, funcs in enumerate(functions):
procs.append(Process(target=subproc, args=pid, funcs))
procs[-1].daemon = True
procs[-1].start()