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é:
-
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. -
Intenté agregar
%debug
en la línea justo antes del códigoreturn 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)
Simplemente escriba
import pdb
en jupyter notebook y luego use esta
cheatsheet
de
cheatsheet
para depurar.
Es muy conveniente.
c
-> continuar,
s
-> paso,
b 12
-> establecer el punto de interrupción en la línea 12 y así sucesivamente.
Algunos enlaces útiles: Documento oficial de Python en pdb , ejemplos de depurador de Python pdb para comprender mejor cómo usar los comandos del depurador .
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