pdb无法在另一个线程中断?

dim*_*ish 15 python multithreading breakpoints pdb

考虑这个多线程程序:

import threading

class SomeThread(threading.Thread):
  def run(self):
    a = 1
    print a

def main():
  print 'hola'
  someThread = SomeThread()
  someThread.start()

if __name__ == '__main__':
  main()
Run Code Online (Sandbox Code Playgroud)

当我用pdb调试这个程序时,在提示符下我首先在两个print语句的每一个上设置一个断点.然后我继续 pdb打破了print 'hola'.我再次继续看到打印在另一个线程中的效果,但pdb不会中断.

帮助命令没有列出任何东西来切换像gdb这样的线程上下文......所以......在一个线程上下文中是否只能设置一个在另一个上下文中跳转的断点?

Mat*_*vor 5

这对我有用:

import threading
import pdb

class SomeThread(threading.Thread):
  def run(self):
    a = 1
    print a
    pdb.set_trace()

def main():
  print 'hola'
  pdb.set_trace()
  someThread = SomeThread()
  someThread.start()

if __name__ == '__main__':
  main()
Run Code Online (Sandbox Code Playgroud)

这给了我:

C:\Code>python b.py
hola
> c:\code\b.py(13)main()
-> someThread = SomeThread()
(Pdb) l
  8         pdb.set_trace()
  9
 10     def main():
 11       print 'hola'
 12       pdb.set_trace()
 13  ->   someThread = SomeThread()
 14       someThread.start()
 15
 16     if __name__ == '__main__':
 17       main()
[EOF]
(Pdb) c
1
--Return--
> c:\code\b.py(8)run()->None
-> pdb.set_trace()
(Pdb) l
  3
  4     class SomeThread(threading.Thread):
  5       def run(self):
  6         a = 1
  7         print a
  8  ->     pdb.set_trace()
  9
 10     def main():
 11       print 'hola'
 12       pdb.set_trace()
 13       someThread = SomeThread()
(Pdb)
Run Code Online (Sandbox Code Playgroud)

这是在Windows 7和Python 2.7.2下。您正在使用哪个OS和Python版本?

  • 我认为问题与调试器中设置的断点有关:((Pdb)b 8`-打印语句上的断点。主线程支持断点,但子线程不支持。 (2认同)