pdb cannot break in another thread?

16,872

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?

Share:
16,872

Related videos on Youtube

dim fish
Author by

dim fish

Updated on June 05, 2022

Comments

  • dim fish
    dim fish about 2 years

    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?

    • FlipMcF
      FlipMcF over 5 years
      Possible duplicate of PDB won't stop on breakpoint
    • dim fish
      dim fish almost 5 years
      Hi Flip, yes I believe this is a duplicate of that answered question. I don't see an option to mark duplicate, maybe that's an action I haven't unlocked yet. Anyone who can, please do.
  • FlipMcF
    FlipMcF over 5 years
    I think the question has to do with breakpoints set within the debugger: (Pdb) b 8 - breakpoint on print statement. The main thread honors the breakpoint, but the child thread does not.
  • FlipMcF
    FlipMcF over 5 years
    if there is a breakpoint farther down the call stack, it will hit it regardless of 's' or 'n'.