python debugging breakpoints ipython

Depuración interactiva inducida por punto de interrupción de Python con IPython



debugging breakpoints (5)

Dentro de la shell IPython, puedes hacer

from IPython.core.debugger import Pdb pdb = Pdb() pdb.runcall(my_function)

por ejemplo, o haga el pdb.set_trace() normal dentro de su función.

Digamos que tengo una sesión de IPython, desde la que llamo a un script:

> run my_script.py

¿Hay alguna manera de inducir un punto de interrupción en my_script.py desde el cual pueda inspeccionar mi área de trabajo desde IPython?

Recuerdo haber leído que en versiones anteriores de IPython se podía hacer:

from IPython.Debugger import Tracer; def my_function(): x = 5 Tracer() print 5;

pero el submódulo Debugger ya no parece estar disponible.

Suponiendo que ya tengo abierta una sesión de IPython: ¿cómo puedo detener mi programa en una ubicación de mi elección e inspeccionar mi espacio de trabajo con IPython ?

En general, preferiría soluciones que no requieran que yo especifique previamente los números de línea, ya que me gustaría posiblemente tener más de una de esas llamadas a Tracer() arriba y no tener que hacer un seguimiento de los números de línea donde están.


El Tracer() todavía existe en ipython en un módulo diferente. Puedes hacer lo siguiente:

from IPython.core.debugger import Tracer def my_function(): x = 5 Tracer()() print 5

Tenga en cuenta los paréntesis de llamada adicionales alrededor de Tracer

edición : Tracer está en desuso , debería usar set_trace() lugar


Esta es la versión que usa el método set_trace() lugar del Tracer() obsoleto.

from IPython.core.debugger import Pdb def my_function(): x = 5 Pdb().set_trace() print 5


Puede ejecutarlo y establecer un punto de interrupción en una línea determinada con:

run -d -b12 myscript

Donde -b12 establece un punto de interrupción en la línea 12. Cuando ingresa esta línea, inmediatamente pasará a pdb y deberá ingresar c para ejecutar hasta ese punto de interrupción.


Siempre he tenido la misma pregunta y la mejor solución que he encontrado que es bastante complicada es agregar una línea que rompa mi código, así:

... a = 1+2 STOP ...

Luego, cuando ejecute ese código, se romperá y puedo hacer% de depuración para ir allí e inspeccionar. También puede activar% pdb para ir siempre al punto donde se rompe su código, pero esto puede ser molesto si no quiere inspeccionar en todas partes y cada vez que se rompe su código. Me encantaría una solución más elegante.