2011-11-22 9 views
10

Utilicé b "classname: function" o "b classname :: function", y esos no funcionaron. ahora utilizo "b linenum" como solución alternativa. Pero a medida que modifico mi código con frecuencia, lienza cambia. Entonces, ¿cómo hacer un punto de interrupción en la función miembro de clase en python? Lo googleo & & lea el manual de python, y no hay respuesta directa .¡Gracias!cómo hacer un punto de interrupción en la función miembro de clase de python?

Respuesta

14

En pdb, el depurador de Python, el punto de corte se puede ajustar con

b classname.methodname 

después de la definición de clase se ha analizado.


Por ejemplo,

% pdb ~/pybin/test.py 

> /home/unutbu/pybin/test.py(4)<module>() 
-> class Foo(object): 
(Pdb) l 
    1  #!/usr/bin/env python 
    2  # coding: utf-8 
    3  
    4 -> class Foo(object): 
    5   def bar(self): pass 
    6  
    7  foo=Foo() 
    8  foo.bar() 
[EOF] 

Ajuste del punto de interrupción antes de analizar la clase de falla:

(Pdb) b Foo.bar 
*** The specified object 'Foo.bar' is not a function 
or was not found along sys.path. 

pero después de analizar la clase:

(Pdb) n 
> /home/unutbu/pybin/test.py(7)<module>() 
-> foo=Foo() 
(Pdb) l 
    2  # coding: utf-8 
    3  
    4  class Foo(object): 
    5   def bar(self): pass 
    6  
    7 -> foo=Foo() 
    8  foo.bar() 
[EOF] 

establecimiento de las obras de punto de interrupción :

(Pdb) b Foo.bar 
Breakpoint 1 at /home/unutbu/pybin/test.py:5 
(Pdb) 

(Pdb) r 
> /home/unutbu/pybin/test.py(5)bar() 
-> def bar(self): pass 
+0

gracias! Funciona. Configurar este tipo de puntos de interrupción después de la clase analizada es especialmente importante. – user1058909

3

Para un punto de interrupción persistente, en la línea antes de que desea romper, también se puede utilizar:

import pdb; pdb.set_trace() 

Véase el python doc para obtener más detalles.

Cuestiones relacionadas