Antworten:
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, benutze python -m pdb your_script.py
.
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
$ python -m pdb scriptName.py
> .../pdb_script.py(7)<module>()
-> """
(Pdb)
B. Innerhalb des Dolmetschers
Während Sie frühe Versionen von Modulen entwickeln und iterativer experimentieren.
$ python
Python 2.7 (r27:82508, Jul 3 2010, 21:12:11)
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pdb_script
>>> import pdb
>>> pdb.run('pdb_script.MyObj(5).go()')
> <string>(1)<module>()
(Pdb)
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 :
#!/usr/bin/env python
# encoding: utf-8
#
import pdb
class MyObj(object):
count = 5
def __init__(self):
self.count= 9
def go(self):
for i in range(self.count):
pdb.set_trace()
print i
return
if __name__ == '__main__':
MyObj(5).go()
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://pythonconquerstheuniverse.wordpress.com/2009/09/10/debugging-in-python/
In Python gibt es ein Modul namens 'pdb'. Oben in Ihrem Python-Skript
import pdb
pdb.set_trace()
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.
Ab Python 3.7 können Sie mit der breakpoint()
integrierten Funktion den Debugger aufrufen:
foo()
breakpoint() # drop into the debugger at this point
bar()
Standardmäßig breakpoint()
wird importiert pdb
und aufgerufen pdb.set_trace()
. Sie können das Debugging-Verhalten jedoch über sys.breakpointhook()
die Umgebungsvariable und deren Verwendung steuern PYTHONBREAKPOINT
.
Weitere Informationen finden Sie in PEP 553 .
breakpoint
ich aufgeregt. Aber dann habe ich gelernt, dass es im Wesentlichen nur eine Abkürzung für ist import 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 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:
python3 -m pip install --user ipdb
und fügen Sie dann der Zeile hinzu, von der aus Sie das Debuggen schrittweise ausführen möchten:
__import__('ipdb').set_trace(context=21)
Sie möchten wahrscheinlich eine Verknüpfung dazu aus Ihrem Editor hinzufügen, z. B. für Vim snipmate ich habe:
snippet ipd
__import__('ipdb').set_trace(context=21)
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:
ipdb3 main.py
Aber das wollen Sie im Allgemeinen nicht, weil:
Alternativ können Sie wie in Raw-PDF 3.2+ einige Haltepunkte über die Befehlszeile festlegen:
ipdb3 -c 'b 12' -c 'b myfunc' ~/test/a.py
obwohl -c c
aus irgendeinem Grund kaputt ist: https://github.com/gotcha/ipdb/issues/156
python -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:
python -m pdb -m my_module
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.
Es gibt breakpoint()
heutzutage Methoden, die ersetzenimport pdb; pdb.set_trace()
.
Es hat auch mehrere neue Funktionen , wie mögliche Umgebungsvariablen.
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.
Wenn Sie eine IDE mit integriertem Debugger möchten, versuchen Sie es mit PyScripter .
https://wiki.python.org/moin/PythonDebuggingTools
pudb ist ein guter Ersatz für pdb
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
und io.BytesIO
stattdessen: DemoDas 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.
Visual Studio mit PTVS könnte eine Option für Sie sein: http://www.hanselman.com/blog/OneOfMicrosoftsBestKeptSecretsPythonToolsForVisualStudioPTVS.aspx
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.