pdb cannot break in another thread?

岁酱吖の 提交于 2019-11-29 17:04:10

问题


Consider this multi-threaded program:

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()

When I debug this program with pdb, at the prompt I first set a break point at each of the two print statements. Then I continue. pdb breaks at print 'hola'. I continue again and see the effect of the print in the other thread, but pdb doesn't break.

The help commands don't list anything to switch thread contexts like gdb... so... is it just not possible in one thread context to set a breakpoint that will trip in another context?


回答1:


This works for me:

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()

Which gives me:

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)

This is under Windows 7 and with Python 2.7.2. What OS & Python version are you using?




回答2:


after you hit your first breakpoint, I assume you are stepping with (n) next line when you get to this line

someThread.start()

make sure you are using (s) step-into and not (n) next. pdb commands



来源:https://stackoverflow.com/questions/12828956/pdb-cannot-break-in-another-thread

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!