Como eu sei, %debug magic
pode fazer depuração dentro de uma célula.
No entanto, tenho chamadas de função em várias células.
Por exemplo,
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
O que eu tentei:
Eu tentei definir
%debug
na primeira linha da célula 1. Mas ele entra no modo de depuração imediatamente, mesmo antes de executar a célula 2.Eu tentei adicionar
%debug
a linha logo antes do códigoreturn do_some_thing_about(b)
. Mas o código é executado para sempre, nunca para.
Qual é a maneira correta de definir um ponto de interrupção no notebook ipython?
import ipdb; ipdb.set_trace()
em uma célula de notebook, ele diz #MultipleInstanceError: Multiple incompatible subclass instances of TerminalIPythonApp are being created.
Você pode usar o
ipdb
jupyter interno com:Edit : as funções acima estão obsoletas desde o IPython 5.1. Esta é a nova abordagem:
Adicione
set_trace()
onde você precisa de um ponto de interrupção. Digitehelp
paraipdb
comandos quando o campo de entrada aparecer.fonte
Tracer
foi depreciado. Agora, funciona desta maneira:from IPython.core.debugger import set_trace
eset_trace()
evoca um ponto de interrupção. Fonte: davidhamann.de/2017/04/22/debugging-jupyter-notebooksfrom IPython.core.debugger import set_trace;set_trace()
Sua função de retorno está na linha de função def (função principal), você deve fornecer uma guia para ela. E use
ao invés de
para depurar a célula inteira, não apenas a linha. Espero que talvez isso ajude você.
fonte
Você sempre pode adicionar isso em qualquer célula:
e o depurador irá parar nessa linha. Por exemplo:
fonte
ipdb
é um refator do depurador Python que está mais intimamente integrado ao IPython.pdb
é construído em.ipdb
também pode ser usado fora do shell do ipython e vem com algumas conveniências, como a conclusão de guias.No Python 3.7, você pode usar a função breakpoint () . Basta entrar
onde quer que você queira que o tempo de execução pare e a partir daí, você pode usar os mesmos comandos pdb (r, c, n, ...) ou avaliar suas variáveis.
fonte
Basta digitar
import pdb
no caderno jupyter, e depois usar este cheatsheet para depurar. É muito conveniente.c
-> continue,s
-> passo,b 12
-> defina o ponto de interrupção na linha 12 e assim por diante.fonte
pdb.set_trace()
no local em que quero definir um ponto de interrupção, pois ob line_no
não está funcionando no Jupyter Notebook e funciona bem no python IDLE.Depois de receber um erro, na próxima célula, execute
%debug
e é isso.fonte
O
%pdb
comando mágico também é bom de usar. Basta dizer%pdb on
e, posteriormente, opdb
depurador será executado em todas as exceções, independentemente da profundidade da pilha de chamadas. Muito conveniente.Se você tem uma linha específica que deseja depurar, apenas crie uma exceção (geralmente você já está!) Ou use o
%debug
comando mágico que outras pessoas têm sugerido.fonte
Acabei de descobrir o PixieDebugger . Mesmo pensando que ainda não tive tempo para testá-lo, realmente parece a maneira mais semelhante de depurar a maneira como usamos o ipython com o ipdb
Ele também tem uma guia "avaliar"
fonte
Um depurador nativo está sendo disponibilizado como uma extensão para o JupyterLab. Lançado há algumas semanas, isso pode ser instalado com a extensão relevante, assim como o kernel xeus-python (que vem notavelmente sem as mágicas conhecidas pelos usuários do ipykernel):
Isso permite uma experiência de depuração visual bem conhecida de outros IDEs.
Fonte: Um depurador visual para Jupyter
fonte