2012-10-10 13 views
7

Rozważmy to wielowątkowy program:pdb nie może przebić się w innym wątku?

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

Kiedy debugować program z WPB, w wierszu po raz pierwszy ustawić punkt przerwania w każdej z dwóch sprawozdań drukowania. Następnie kontynuuję. pdb pęka pod adresem print 'hola'. Kontynuuję ponownie i widzę efekt wydruku w drugim wątku, ale pdb się nie psuje.

Komendy pomocy nie wyświetlają niczego, aby zmienić konteksty wątków, takie jak gdb ... więc ... czy w kontekście jednego wątku nie jest możliwe ustawienie punktu przerwania, który zostanie wywołany w innym kontekście?

Odpowiedz

5

Działa to dla mnie:

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

Który daje mi:

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) 

to pod Windows 7 i Python 2.7.2. Jakiej wersji Pythona używasz OS &?

0

po trafieniu swój pierwszy punkt przerwania, Zakładam, że jesteś stepping z (n) następna linia kiedy dojdziesz do tej linii

someThread.start() 

upewnić używasz (s) Etap-do i nie (n) następny. pdb commands

Powiązane problemy