Wie ich weiß, %debug magic
kann Debugging in einer Zelle durchgeführt werden.
Ich habe jedoch Funktionsaufrufe über mehrere Zellen hinweg.
Beispielsweise,
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
Was ich versucht habe:
Ich habe versucht,
%debug
in die erste Zeile von Zelle 1 zu setzen. Es wechselt jedoch sofort in den Debug-Modus, noch bevor Zelle 2 ausgeführt wird.Ich habe versucht,
%debug
die Zeile direkt vor dem Code einzufügenreturn do_some_thing_about(b)
. Aber dann läuft der Code für immer, hört nie auf.
Was ist der richtige Weg, um einen Haltepunkt im ipython-Notizbuch festzulegen?
import ipdb; ipdb.set_trace()
in eine Notizbuchzelle tippe, heißt esMultipleInstanceError: Multiple incompatible subclass instances of TerminalIPythonApp are being created.
Sie können
ipdb
inside jupyter verwenden mit:Bearbeiten : Die oben genannten Funktionen sind seit IPython 5.1 veraltet. Dies ist der neue Ansatz:
Fügen
set_trace()
Sie hinzu, wo Sie einen Haltepunkt benötigen. Geben Siehelp
füripdb
Befehle ein, wenn das Eingabefeld angezeigt wird.quelle
Tracer
wurde abgeschrieben. Jetzt funktioniert es so:from IPython.core.debugger import set_trace
undset_trace()
ruft einen Haltepunkt hervor. Quelle: davidhamann.de/2017/04/22/debugging-jupyter-notebooksfrom IPython.core.debugger import set_trace;set_trace()
Ihre Rückgabefunktion steht in der Zeile der Def-Funktion (Hauptfunktion), Sie müssen ihr eine Registerkarte zuweisen. Und verwenden
anstatt
die ganze Zelle nicht nur Zeile zu debuggen. Hoffe, vielleicht hilft dir das.
quelle
Sie können dies jederzeit in eine beliebige Zelle einfügen:
und der Debugger stoppt in dieser Zeile. Beispielsweise:
quelle
ipdb
ist ein Refactor des Python-Debuggers, der enger in IPython integriert ist.pdb
ist eingebaut.ipdb
kann auch außerhalb der ipython-Shell verwendet werden und bietet einige Annehmlichkeiten wie das Ausfüllen von Registerkarten.In Python 3.7 können Sie die Funktion breakpoint () verwenden. Einfach eintreten
Überall dort, wo die Laufzeit angehalten werden soll, können Sie von dort aus dieselben pdb-Befehle (r, c, n, ...) verwenden oder Ihre Variablen auswerten.
quelle
import pdb
Geben Sie einfach das Jupyter-Notizbuch ein und verwenden Sie dieses Cheatsheet zum Debuggen. Es ist sehr praktisch.c
-> weiter,s
-> Schritt,b 12
-> Haltepunkt in Zeile 12 setzen und so weiter.quelle
pdb.set_trace()
, wo ich einen Haltepunkt setzen möchte, da dasb line_no
in Jupyter Notebook nicht funktioniert und gut mit Python IDLE funktioniert.Nachdem Sie eine Fehlermeldung erhalten haben, führen Sie sie in der nächsten Zelle aus
%debug
und fertig.quelle
Der
%pdb
magische Befehl ist auch gut zu benutzen. Sagen Sie einfach%pdb on
und anschließend wird derpdb
Debugger mit allen Ausnahmen ausgeführt, egal wie tief im Aufrufstapel. Sehr praktisch.Wenn Sie eine bestimmte Zeile haben, die Sie debuggen möchten, lösen Sie dort einfach eine Ausnahme aus (oft sind Sie es bereits!) Oder verwenden Sie den
%debug
magischen Befehl, den andere Leute vorgeschlagen haben.quelle
Ich habe gerade PixieDebugger entdeckt . Obwohl ich noch keine Zeit hatte, es zu testen, scheint es wirklich die ähnlichste Art zu sein, die Art und Weise zu debuggen, wie wir sie in ipython mit ipdb verwenden
Es hat auch eine Registerkarte "Auswerten"
quelle
Ein nativer Debugger wird als Erweiterung für JupyterLab zur Verfügung gestellt. Vor einigen Wochen veröffentlicht, kann dies installiert werden, indem die entsprechende Erweiterung sowie der xeus-python-Kernel abgerufen werden (der insbesondere ohne die den ipykernel-Benutzern bekannten Magie auskommt):
Dies ermöglicht ein visuelles Debugging-Erlebnis, das von anderen IDEs bekannt ist.
Quelle: Ein visueller Debugger für Jupyter
quelle