当我必须调试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?