In Java / C # können Sie leicht durch den Code gehen, um zu verfolgen, was möglicherweise schief geht, und IDEs machen diesen Prozess sehr benutzerfreundlich.
Können Sie Python-Code auf ähnliche Weise verfolgen?
Ja! Es gibt einen Python-Debugger, der pdb
nur dafür aufgerufen wird !
Sie können ein Python-Programm pdb
mit pdb myscript.py
oder starten python -m pdb myscript.py
.
Sie können dann einige Befehle ausgeben, die auf der pdb
Seite dokumentiert sind .
Einige nützliche sind:
b
: Haltepunkt setzenc
: Setzen Sie das Debuggen fort, bis Sie einen Haltepunkt erreicht habens
: Schritt durch den Coden
: um zur nächsten Codezeile zu gelangenl
: Quellcode für die aktuelle Datei auflisten (Standard: 11 Zeilen einschließlich der ausgeführten Zeile)u
: Navigieren Sie in einem Stapelrahmen nach obend
: Navigieren Sie in einem Stapelrahmen nach untenp
: um den Wert eines Ausdrucks im aktuellen Kontext zu druckenWenn Sie keinen Befehlszeilen-Debugger verwenden möchten , verfügen einige IDEs wie Pydev , Wing IDE oder PyCharm über einen GUI-Debugger. Wing und PyCharm sind kommerzielle Produkte, aber Wing hat eine kostenlose "Personal" -Version und PyCharm eine kostenlose Community-Edition.
pudb
ist toll dafür. Alsopydev
pdb
ist kein Befehlszeilenprogramm. Um es zu benutzen, benutzepython -m pdb your_script.py
.Mit dem Python Interactive Debugger 'pdb'
Der erste Schritt besteht darin, den Python-Interpreter in den Debugging-Modus zu versetzen.
A. Über die Befehlszeile
Der einfachste Weg, der von der Kommandozeile aus ausgeführt wird, des Python-Interpreters
B. Innerhalb des Dolmetschers
Während Sie frühe Versionen von Modulen entwickeln und iterativer experimentieren.
C. Aus Ihrem Programm heraus
Für ein großes Projekt und ein lang laufendes Modul kann das Debuggen aus dem Programm heraus gestartet werden, indem import pdb und set_trace () wie folgt verwendet werden :
Schritt-für-Schritt-Debugging für mehr interne Funktionen
Führen Sie die nächste Anweisung aus… mit „n“ (next)
Wiederholen des letzten Debugging-Befehls… mit ENTER
Alles beenden ... mit "q" (beenden)
Drucken des Wertes von Variablen… mit „p“ (Drucken)
a) pa
Ausschalten der Eingabeaufforderung (Pdb)… mit „c“ (Weiter)
Sehen, wo Sie sind ... mit "l" (Liste)
Betreten von Unterprogrammen… mit „s“ (Schritt in)
Fortsetzung… aber nur bis zum Ende der aktuellen Unterroutine… mit „r“ (return)
Weisen Sie einen neuen Wert zu
a) ! b = "B"
Setzen Sie einen Haltepunkt
a) Leinenzahl brechen
b) Funktionsname unterbrechen
c) Dateiname brechen: Leinennummer
Temporärer Haltepunkt
a) Leinenzahl brechen
Bedingter Haltepunkt
a) Leinenzahl brechen, Zustand
Hinweis: ** Alle diese Befehle sollten von ** pdb ausgeführt werden
Ausführliche Informationen finden Sie unter: -
https://pymotw.com/2/pdb/
https://pythonconquerstheuniverse.wordpress.com/2009/09/10/debugging-in-python/
quelle
In Python gibt es ein Modul namens 'pdb'. Oben in Ihrem Python-Skript
und Sie gelangen in den Debugging-Modus. Sie können 's' verwenden, um Schritt zu machen, 'n', um der nächsten Zeile zu folgen, ähnlich wie Sie es mit dem 'gdb'-Debugger tun würden.
quelle
Ab Python 3.7 können Sie mit der
breakpoint()
integrierten Funktion den Debugger aufrufen:Standardmäßig
breakpoint()
wird importiertpdb
und aufgerufenpdb.set_trace()
. Sie können das Debugging-Verhalten jedoch übersys.breakpointhook()
die Umgebungsvariable und deren Verwendung steuernPYTHONBREAKPOINT
.Weitere Informationen finden Sie in PEP 553 .
quelle
breakpoint
ich aufgeregt. Aber dann habe ich gelernt, dass es im Wesentlichen nur eine Abkürzung für istimport pdb; pdb.set_trace()
und das hat mich traurig gemacht. Python-Entwickler: Bitte konzentrieren Sie sich auf die Verbesserung von PDB mit grundlegenden GDB-Funktionen wie Kontextzeilen, beständigem Befehlsverlauf und automatischer Vervollständigung von Registerkarten :-)ipdb (IPython-Debugger)
ipdb erweitert pdb um IPython-Funktionalität und bietet die folgenden RIESIGEN Verbesserungen:
Ähnlich wie pdg ist ipdb im Vergleich zu GDB noch lange nicht perfekt und völlig rudimentär, aber es ist bereits eine enorme Verbesserung gegenüber pdb.
Die Verwendung ist analog zu
pdb
, installieren Sie es einfach mit:und fügen Sie dann der Zeile hinzu, von der aus Sie das Debuggen schrittweise ausführen möchten:
Sie möchten wahrscheinlich eine Verknüpfung dazu aus Ihrem Editor hinzufügen, z. B. für Vim snipmate ich habe:
so kann ich nur tippen
ipd<tab>
und es erweitert sich bis zum Haltepunkt. Dann ist das Entfernen einfach,dd
da alles in einer einzigen Zeile enthalten ist.context=21
erhöht die Anzahl der Kontextzeilen wie folgt: Erhöht Wie kann ich dafür sorgen, dass ipdb beim Debuggen mehr Kontextzeilen anzeigt?Alternativ können Sie Programme auch von Anfang an debuggen mit:
Aber das wollen Sie im Allgemeinen nicht, weil:
Alternativ können Sie wie in Raw-PDF 3.2+ einige Haltepunkte über die Befehlszeile festlegen:
obwohl
-c c
aus irgendeinem Grund kaputt ist: https://github.com/gotcha/ipdb/issues/156python -m module
Das Debuggen wurde gefragt unter: Wie debugge ich ein Python-Modul, das mit Python -m ausgeführt wird, über die Befehlszeile? und da Python 3.7 möglich ist mit:Schwerwiegende fehlende Funktionen von pdb und ipdb im Vergleich zu GDB:
IPdB-spezifische Belästigungen:
Getestet in Ubuntu 16.04, ipdb == 0.11, Python 3.5.2.
quelle
Es gibt
breakpoint()
heutzutage Methoden, die ersetzenimport pdb; pdb.set_trace()
.Es hat auch mehrere neue Funktionen , wie mögliche Umgebungsvariablen.
quelle
Wenn Sie aus Java / C # kommen, ist es wahrscheinlich am besten, Eclipse mit Pydev zu verwenden . Dies gibt Ihnen eine voll funktionsfähige IDE mit integriertem Debugger. Ich verwende sie auch mit Django.
quelle
Wenn Sie eine IDE mit integriertem Debugger möchten, versuchen Sie es mit PyScripter .
quelle
https://wiki.python.org/moin/PythonDebuggingTools
pudb ist ein guter Ersatz für pdb
quelle
Python Tutor ist ein Online-Einzelschritt-Debugger für Anfänger. Sie können Code für die Bearbeitung eingeben eingeben und dann auf "Ausführung visualisieren" klicken, um die Ausführung zu starten.
Unter anderem unterstützt es:
Es werden jedoch auch viele Dinge nicht unterstützt , zum Beispiel:
io.StringIO
undio.BytesIO
stattdessen: Demoquelle
Das programmgesteuerte Durchlaufen und Nachverfolgen von Python-Code ist ebenfalls möglich (und es ist einfach!). Weitere Informationen finden Sie in der Dokumentation zu sys.settrace () . Auch hier ist ein Tutorial, um Ihnen den Einstieg zu erleichtern.
quelle
Visual Studio mit PTVS könnte eine Option für Sie sein: http://www.hanselman.com/blog/OneOfMicrosoftsBestKeptSecretsPythonToolsForVisualStudioPTVS.aspx
quelle
PyCharm ist eine IDE für Python, die einen Debugger enthält. In diesem YouTube-Video finden Sie eine Einführung in die Verwendung des PyCharm-Debuggers zum Durchlaufen des Codes.
PyCharm Tutorial - Debuggen Sie Python-Code mit PyCharm
Hinweis: Dies ist keine Bestätigung oder Überprüfung. PyCharm ist ein kommerzielles Produkt, für das man bezahlen muss, aber das Unternehmen bietet Schülern und Lehrern eine kostenlose Lizenz sowie eine "leichte" Community-Version, die kostenlos und Open Source ist.
quelle