Wie ich weiß, kann %debug magic
innerhalb einer Zelle debuggen.
Ich habe jedoch Funktionsaufrufe über mehrere Zellen hinweg.
Zum Beispiel,
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 probiert habe:
Ich habe versucht, %debug
in der ersten Zeile von Zelle-1 festzulegen. Es tritt jedoch sofort in den Debug-Modus ein, sogar bevor Zelle 2 ausgeführt wird.
Ich habe versucht, %debug
in die Zeile direkt vor dem Code return do_some_thing_about(b)
einzufügen. Aber dann läuft der Code für immer und hört nie auf.
Was ist der richtige Weg, um einen Haltepunkt im ipython-Notebook festzulegen?
Verwenden Sie ipdb
Installieren Sie es über
pip install ipdb
Verwendungszweck:
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)
Zur zeilenweisen Ausführung verwenden n und für den Einstieg in eine Funktion verwenden s und um das Debuggen zu beenden, verwenden Sie Prompt c.
Eine vollständige Liste der verfügbaren Befehle finden Sie hier: https://appletree.or.kr/quick_reference_cards/Python/Python%20Debugger%20Cheatsheet.pdf
Sie können ipdb
in Jupyter verwenden mit:
from IPython.core.debugger import Tracer; Tracer()()
Edit : Die oben genannten Funktionen werden seit IPython 5.1 nicht mehr unterstützt. Dies ist der neue Ansatz:
from IPython.core.debugger import set_trace
Fügen Sie set_trace()
hinzu, wo Sie einen Haltepunkt benötigen. Geben Sie help
für ipdb
-Befehle ein, wenn das Eingabefeld angezeigt wird.
Ihre Rückgabefunktion ist in der Zeile def (Hauptfunktion), Sie müssen eine Registerkarte angeben .. und verwenden
%%debug
anstatt
%debug
die ganze Zelle nicht nur Zeile zu debuggen. Hoffe, vielleicht hilft dir das.
Sie können dies jederzeit in jeder Zelle hinzufügen:
import pdb; pdb.set_trace()
der Debugger wird in dieser Zeile angehalten. Zum Beispiel:
In[1]: def fun1(a):
def fun2(a):
import pdb; pdb.set_trace() # debugging starts here
return fun2(a)
In[2]: fun1(1)
Geben Sie einfach import pdb
in das Jupyter-Notizbuch ein und verwenden Sie dann dieses Cheatsheet zum Debuggen. Das ist sehr praktisch.
c
-> weiter, s
-> Schritt, b 12
-> Haltepunkt in Zeile 12 setzen usw.
Einige nützliche Links: Offizielles Python-Dokument zu pdb , Python pdb-Debugger-Beispiele zum besseren Verständnis der Verwendung der Debugger-Befehle .
Der magische Befehl %pdb
ist auch gut zu verwenden. Sagen Sie einfach %pdb on
und anschließend wird der pdb
-Debugger mit allen Ausnahmen ausgeführt, unabhängig davon, wie tief der Aufrufstack ist. Sehr praktisch.
Wenn Sie eine bestimmte Zeile haben, die Sie debuggen möchten, lösen Sie dort einfach eine Ausnahme aus (oft sind Sie bereits!) Oder verwenden Sie den %debug
-Befehl, den andere Leute vorgeschlagen haben.
In Python 3.7 können Sie die Funktion breakpoint () verwenden. Einfach eintreten
breakpoint()
wo immer Sie die Laufzeit stoppen möchten und von dort aus dieselben pdb-Befehle verwenden können (r, c, n, ...) oder Ihre Variablen auswerten.
Nachdem Sie einen Fehler erhalten haben, führen Sie in der nächsten Zelle einfach %debug
aus.
Ich habe gerade PixieDebugger entdeckt. Auch wenn ich noch nicht die Zeit hatte, um es zu testen, scheint es der ähnlichste Weg zu sein, die Art und Weise zu debuggen, wie wir sie in ipython mit ipdb verwenden
Es hat auch eine "auswerten" Registerkarte