2011-06-30 16 views
5

Esto debería ser una cuestión trivial, pero mi búsqueda hasta ahora ha sido infructuosa:a una función miembro en el depurador de Python

estoy usando el depurador de Python (AP), por primera vez, y era bastante contento de encontrar la mayoría de los comandos familiares de usar gdb.

Sin embargo, cuando fui a un punto de ruptura en el() miembro de de análisis de clase JamParser con la declaración:

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

He intentado varias diversas variantes, incluyendo:

(Pdb) b jam2dot.py:JamParser.parse 

Supongo que desde que invoqué el depurador desde la línea de comandos, conoce las entidades en el archivo. ¿Es eso una suposición falsa?

El documentation dice que break puede tomar una función como argumento, pero no ofrece ninguna ayuda de sintaxis. Entonces, ¿cómo configuro un punto de corte para una función miembro por nombre?

+2

SI tiene acceso a la fuente, suelo soltar un 'pdb de importación; pdb.set_trace() 'donde quiero en lugar de pasar con el depurador. –

+0

@Noufal: Ahora que tengo un poco más de experiencia, me he dado cuenta del valor de su sugerencia, gracias. –

+0

De nada. Aprendí este truco de un grupo de profesionales de Python en PyCon hace dos años. :) –

Respuesta

13

Debe importar los nombres antes de poder consultarlos en el depurador.

(Pdb) from jam2dot import JamParser 
(Pdb) b JamParser.parse 
+0

Eso hizo el truco, gracias! –

+0

Wow. Qué mensaje de error tan horrible y engañoso. Si un programa * no puede encontrar * algo, debe decirlo, en lugar de dar a entender que lo encontró, pero no fue el tipo correcto de cosas. – kindall

+0

Sí, es bastante pobre, ¿verdad? El problema es que el comando 'b' toma * bien * un nombre de archivo, * o * una función, por lo que el mensaje de error debe respetar esta ambigüedad (después de todo, tal vez quería un punto de interrupción en el archivo llamado' JamParser.py' y escribió incorrectamente la extensión). Pero estoy de acuerdo en que podría ser mucho mejor que esto. ¡Te sugiero que envíes un informe de error! –

Cuestiones relacionadas