在PDB shell的另一个线程中设置断点

时间:2018-03-26 09:59:54

标签: python multithreading debugging pdb

当我必须调试Python程序时,我通常使用PDB的交互式shell:

python -m pdb <my script>

然后设置我的断点:

(Pdb) b <file>:<line>

问题是如果断点位于主线程以外的线程中,PDB不会中断。例如,在以下脚本中:

import threading

event_quit = threading.Event()

class myThread (threading.Thread):

    def __init__(self):
        threading.Thread.__init__(self)

    def run(self):
        print("myThread start")
        print("Breakpoint here")
        print("myThread end")
        event_quit.set()

thread = myThread()
thread.start()
event_quit.wait()

如果我在print("Breakpoint here")设置断点,PDB不会中断。

建议here的解决方案是在代码中放置pdb.set_trace(),而不是通过交互式shell设置断点。

我发现该解决方案有点笨拙(需要您打开并编辑要调试的文件)甚至可能存在危险(如果pdb.set_trace()以某种方式留在生产代码中,可能会造成混乱)。

有没有办法用PDB调试多线程程序,而不编辑文件并只使用交互式shell?

0 个答案:

没有答案