debugger python python-2.7 jupyter-notebook ipython-notebook ipython pdb

debugger - ¿Cuál es la forma correcta de depurar en el portátil iPython?



pdb en python (9)

Como sé, %debug magic puede depurar dentro de una celda.

Sin embargo, tengo llamadas a funciones en varias celdas.

Por ejemplo,

In[1]: def fun1(a) def fun2(b) # I want to set a breakpoint for the following line # return do_some_thing_about(b) return fun2(a) In[2]: import multiprocessing as mp pool=mp.Pool(processes=2) results=pool.map(fun1, 1.0) pool.close() pool.join

Lo que probé:

  1. Intenté establecer %debug en la primera línea de cell-1. Pero ingresa al modo de depuración inmediatamente, incluso antes de ejecutar cell-2.

  2. Intenté agregar %debug en la línea justo antes del código return do_some_thing_about(b) . Pero luego el código se ejecuta para siempre, nunca se detiene.

¿Cuál es la forma correcta de establecer un punto de interrupción dentro del cuaderno de ipython?


Acabo de descubrir PixieDebugger . Aunque pensé que aún no había tenido tiempo de probarlo, realmente parece la forma más similar de depurar la forma en que se usa ipython con ipdb

También tiene una pestaña "evaluar"


Después de obtener un error, en la siguiente celda simplemente ejecute %debug y %debug .


El comando mágico %pdb es bueno para usar. Simplemente diga %pdb on y, posteriormente, el depurador pdb se ejecutará en todas las excepciones, sin importar qué tan profundo en la pila de llamadas. Muy útil.

Si tiene una línea en particular que desea depurar, simplemente active una excepción allí (¡a menudo ya está!) O use el comando mágico %debug que otras personas han estado sugiriendo.


En Python 3.7 puede usar la función breakpoint() . Solo ingresa

breakpoint()

donde quiera que se detenga el tiempo de ejecución y desde allí puede usar los mismos comandos pdb (r, c, n, ...) o evaluar sus variables.


Puede usar ipdb dentro de jupyter con:

from IPython.core.debugger import Tracer; Tracer()()

Editar : las funciones anteriores están en desuso desde IPython 5.1. Este es el nuevo enfoque:

from IPython.core.debugger import set_trace

Agregue set_trace() donde necesita un punto de interrupción. Escriba help para los comandos de ipdb cuando aparezca el campo de entrada.


Siempre puede agregar esto en cualquier celda:

import pdb; pdb.set_trace()

y el depurador se detendrá en esa línea. Por ejemplo:

In[1]: def fun1(a): def fun2(a): import pdb; pdb.set_trace() # debugging starts here return fun2(a) In[2]: fun1(1)



Su función de retorno está en línea con la función def (función principal), debe asignarle una pestaña. Y use

%%debug

en vez de

%debug

para depurar toda la celda, no solo la línea. Espero, tal vez esto te ayude.


Use ipdb

Instalarlo a través de

pip install ipdb

Uso:

In[1]: def fun1(a): def fun2(a): import ipdb; ipdb.set_trace() # debugging starts here return do_some_thing_about(b) return fun2(a) In[2]: fun1(1)

Para ejecutar línea por línea, use ny para pasar a una función, use sy para salir de la solicitud de depuración, use c .

Para obtener una lista completa de los comandos disponibles: https://appletree.or.kr/quick_reference_cards/Python/Python%20Debugger%20Cheatsheet.pdf