odontologia - python debugger gui
¿Es posible eliminar un punto de interrupción establecido con ipdb.set_trace()? (3)
Utilicé ipdb.set_trace()
en algún lugar de mi código Python. ¿Es posible ignorar este punto de ruptura usando un comando de IPDB?
clear
me dice que borró todos los puntos de ruptura, pero IPDB se detiene de nuevo cuando se topa con la línea con ipdb.set_trace()
.
disable 1
me dice: No breakpoint numbered 1
ignore 1
dice: el Breakpoint index ''1'' is not valid
No breakpoint numbered 1
Breakpoint index ''1'' is not valid
Para aclarar: por supuesto, simplemente podría eliminar el punto de interrupción de mi código fuente. Pero esto requeriría salir del depurador y volver a iniciarlo. A menudo se necesita mucho trabajo para llegar a algún lugar y reiniciar el depurador dificulta la vida. Además, si hay un bucle enorme y desea inspeccionar objetos en el bucle, lo más fácil es colocar un punto de ruptura en el bucle directamente después del objeto. ¿Cómo podría entonces omitir el bucle (y las miles de llamadas set_trace()
) y pasar por el código después del bucle usando el next
?
Bueno, PUEDES aprovechar el hecho de que cualquier cosa en Python es un objeto. Mientras estés en el depurador, puedes hacer algo como esto:
def f(): pass
ipdb.set_trace = f
set_trace aún será llamado, pero no hará nada. Por supuesto, es algo permanente, pero puedes hacerlo
reload ipdb
y obtendrá el comportamiento original de vuelta.
(¿por qué haría esto? cuando coloca accidentalmente un punto de interrupción en una función llamada a menudo llamada try / except. Una vez que se da cuenta de que se está deteniendo 1000 veces en esta función, intenta ctrl-c, pero eso queda atrapado en el try / except y vuelve a estar en ipdb. Así que, si está en un código de bajo nivel, asegúrese de que su set_traces tenga algún contexto:
if myvar in [''some'', ''sentinel'', ''values'']:
ipdb.set_trace()
etc.
Después de aprender de Corley
ipdb.set_trace = lambda: None
Funciona para mi.
La ejecución del programa también debe indicarle exactamente dónde ha establecido su idb.set_trace()
cuando se está golpeando (de lo contrario, pruebe los comandos where
o bt
). A continuación, puede eliminar esa línea del archivo y reiniciar el programa.
De lo contrario, podría resultarle útil, si se siente más experimental.