2012-10-10 57 views
7

consideran este programa multi-hilo:pdb no se puede romper en otro hilo?

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

Cuando depurar este programa con AP, en el símbolo puse por primera vez un punto de quiebre en cada una de las dos declaraciones de impresión. Entonces continúo. pdb rompe en print 'hola'. Continúo de nuevo y veo el efecto de la impresión en el otro hilo, pero el pdb no se rompe.

Los comandos de ayuda no enumeran nada para cambiar los contextos de subprocesos como gdb ... entonces ... ¿no es posible en un contexto de subproceso establecer un punto de interrupción que se disparará en otro contexto?

Respuesta

5

Esto funciona para mí:

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

que me da:

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) 

Ésta es bajo Windows 7 y con Python 2.7.2. ¿Qué versión de Python de OS & está usando?

0

después de golpear su primer punto de interrupción, supongo que usted está caminando con (n) siguiente línea cuando se llega a esta línea

someThread.start() 

asegúrese de que está utilizando (s) paso a la entrada ya no (n) siguiente. pdb commands

Cuestiones relacionadas