Nur eine Frage der Bequemlichkeit. Ich war ein bisschen verwöhnt mit Debuggern in IDEs wie Visual Studio und XCode. Ich finde es etwas import pdb; pdb.set_trace()
umständlich, etwas eingeben zu müssen, um einen Haltepunkt festzulegen (ich möchte lieber keine PDF-Datei oben in die Datei importieren, da ich sie möglicherweise vergessen und belassen könnte).
Gibt es eine einfachere Möglichkeit, einen Haltepunkt in Python-Code festzulegen, der so einfach und unauffällig ist wie das, was Sie in einer IDE sehen?
python -m pdb <your_script>.py
dann einfachb <line_number>
, um den Haltepunkt auf die ausgewählte Zeilennummer zu setzen (keine Funktionsklammern). Drücken Siec
, um mit Ihrem Haltepunkt fortzufahren. Sie können alle Ihre Haltepunkte mit demb
Befehl selbst anzeigen. Geben Siehelp
für andere PDB - Befehle zur Verfügung , während das Debuggen zu sehen.breakpoint()
Funktion verwenden. python.org/dev/peps/pep-0553Antworten:
Sie können Ihr Programm über
pdb
die Befehlszeile ausführen , indem Sie es ausführenEs wird in der ersten Zeile unterbrochen. Anschließend können Sie mit dem
break
Befehl einen beliebigen Haltepunkt in Ihrem Code hinzufügen. Die Syntax lautet:Es ist flexibel genug, um Ihnen die Möglichkeit zu geben, überall einen Haltepunkt hinzuzufügen.
quelle
pdb.set_trace()
in den Debugger gehe und denl
Befehl (Liste) verwende und sehe, dass ich einen Haltepunkt in Zeile 27 setzen möchte, Folgendes eingeben:b 27
und der Debugger würde einen Haltepunkt in Zeile 27 setzen (ich fand Die Dokumentation war etwas schwierig zu verstehen, daher wollte ich diesen Punkt der Klarstellung hinzufügen.x
, und Sie wollen stoppen , wenn seine Methodef
genannt wird, kann man sagenbreak x.f
, und dannc(ontinue)
. Dies funktioniert auch dann, wenn sich das Objekt in einer unzugänglichen Datei befindet oder dynamisch erstellt wurde, z. B. durch Aufheben der Auswahl.b /data/users/me/project/env/local/lib/python2.7/site-packages/django/core/urlresolvers.py:596
Sie können verwenden:
quelle
set_trace
nur erzwingen, wenn ich bp () verwende?In vim habe ich dafür ein Makro eingerichtet (in meiner .vimrc-Datei):
Ich kann also einfach \ b drücken (wenn ich mich nicht im Einfügemodus befinde) und es wird ein Haltepunkt nach der aktuellen Zeile hinzugefügt, oder \ B (beachten Sie das Großbuchstaben) und es setzt einen vor die aktuelle Zeile.
das scheint in Ordnung zu funktionieren. Die meisten anderen "einfachen" Programmierer-Editoren (Emacs, Sublimetext usw.) sollten ähnliche einfache Möglichkeiten haben, dies zu tun.
Edit: Ich habe tatsächlich:
Dadurch wird es nur für Python-Quelldateien aktiviert. Sie können sehr leicht ähnliche Zeilen für Javascript oder andere von Ihnen verwendete Sprachen hinzufügen.
Update 2019 (Python 3.7+)
Python 3.7+ hat jetzt das eingebaute,
breakpoint()
das das vorherigeimport pdb; pdb.set_trace()
in vim ersetzen kann . Es funktioniert immer noch genauso.quelle
set autoindent
in Ihrer .vimrc- Datei haben.set autoindent
standardmäßig mit (und einer Reihe anderer Optionen) ausgeliefert werden. Eines der ersten Dinge, die ich mit einem neuen System mache, ist ein besseres Vimrc ..."dyy
und wann immer Sie es brauchen, tun Sie einfach"dp
oder"dP
. Lerne vim Register ! Sie sind sehr nützlich und werden immer unterstützt!qd
und"dp
fügen Sie es später ein . Weisen Sie Ihre Anweisungen schließlich einem Register zu, das beim Laden von vim immer ausgefüllt wird. Beispiel:let @d = 'oimport pdb; pdb.set_trace()k0:w'
Verwenden@d
Sie jetzt einfach, wann immer Sie die Zeile in eine Datei einfügen möchten. Das obige speichert auch die Datei. Sie müssen jedoch Ihre eigenen aufzeichnen (anstatt oben zu kopieren / einfügen), da spezielle Zeichen erforderlich sind (für die Flucht usw.).Wenn Sie nicht jedes Mal, wenn das Programm ausgeführt wird (in Python 3.2+), manuell Haltepunkte setzen möchten, sagen Sie beispielsweise, Sie möchten direkt in Zeile 3 einen Haltepunkt erstellen und die Ausführung dort stoppen:
python -m pdb -c "b 3" -c c your_script.py
Die folgenden Informationen können hilfreich sein:
quelle
Ich habe es noch nicht ausprobiert, aber sie haben gerade einen neuen integrierten Breakpoint () in Python 3.7 implementiert, was bedeutet, dass Sie jetzt einen Breakpoint mit einer Anweisung einfügen können:
quelle
So würden Sie pdb in der Befehlszeile verwenden, ohne etwas in Ihrem Quellcode zu implementieren (die Dokumentation und andere Online-Ressourcen erklären dies nicht gut einem Programmierer, der in der Vergangenheit nur visuelle Debugger verwendet hat):
Starten Sie pdb, indem Sie Folgendes in eine Shell-Eingabeaufforderung eingeben:
Dieser Befehl initialisiert pdb und der pdb-Debugger wird in der ersten Zeile Ihres python_script unterbrochen und wartet auf eine Eingabe von Ihnen:
Dies ist die Schnittstelle für die Kommunikation mit dem Debugger. Jetzt können Sie hier Ihre Befehle angeben. Im Gegensatz zur Verwendung von Schaltflächen oder Tastaturkürzeln in visuellen Debuggern verwenden Sie hier Befehle, um dieselben Ergebnisse abzuleiten.
Sie können mit dem Befehl "n" (weiter) zur nächsten Zeile in Ihrem Code wechseln:
Wenn Sie einen nächsten Vorgang ausführen, werden die Zeilennummer und der spezifische Code in der Quelle angezeigt:
Sie können einen Haltepunkt festlegen, indem Sie eine Zeilennummer in Ihrem Quellcode angeben.
Hier ist der Debugger so eingestellt, dass er in Zeile 50 unterbrochen wird. Wenn keine anderen Haltepunkte vorhanden sind, ist der Haltepunkt in Zeile 50 der erste und kann durch die Haltepunkt-ID referenziert werden, die in diesem Fall 1 ist. Wenn Sie weitere Haltepunkte hinzufügen, erhalten diese nacheinander Bezeichner (z. B. 2, 3 usw.).
Sobald ein Haltepunkt festgelegt ist, führen Sie Ihr Programm weiter aus, bis pdb den Haltepunkt wie folgt erreicht:
Sobald Sie einen Haltepunkt erreicht haben, können Sie mit dem Befehl n wie zuvor beschrieben zur nächsten Zeile wechseln. Wenn Sie die Werte von Variablen untersuchen möchten, führen Sie den Parameterbefehl wie folgt aus:
Wenn Sie keinen Haltepunkt mehr benötigen, können Sie ihn löschen, indem Sie die ID des Haltepunkts mit dem Befehl clear übergeben:
Wenn Sie mit dem Debugger fertig sind, können Sie die Ausführung wie den Python-Befehlszeileninterpreter beenden.
Ich hoffe, dies wird jedem helfen, mit pdb zu beginnen. Hier ist eine Liste von Befehlen, die Sie mit dem Debugger verwenden können: pdb also Fragen und Antworten
quelle
Python
3.7
verfügt über eine neu integrierte Methode zum Festlegen von Haltepunkten. BerufungMehr hier https://stackoverflow.com/a/53263117/6488361
quelle
Sie können eine IDE verwenden, die das Debuggen von Python unterstützt, oder Sie können sich das hervorragende Winpdb-Tool ansehen. Dies funktioniert auf jeder Plattform und bietet grafische Debugging-Funktionen für Ihr Python-Skript.
http://winpdb.org/
quelle
Sie können verwenden:
Alle oben genannten Funktionen unterstützen das Python-Debugging innerhalb einer IDE.
quelle
Wenn in Atom Python-Plugins installiert sind, können Sie einfach '
pdb
' eingeben und die Eingabetaste drücken. Das Snippet gibt import ein und verfolgt es für Sie zurück.Ich habe mich jetzt daran gewöhnt, dass ich es manchmal einfach eingebe, selbst wenn ich es in vim bearbeite und darauf warte, dass das Dropdown-Menü angezeigt wird.
quelle
Eine unterschätzte Methode besteht darin, den Haltepunkt in pdb direkt festzulegen:
setzt einen Haltepunkt auf
site-packages\torch\__init__.py:10
Dann
pdb> c
wird an diesem Haltepunkt angehalten.Folgendes gilt ebenfalls:
Siehe Dokument für Details.
quelle
Sie können Vim mit dem Python-Mode- Plugin oder Emacs mit dem Elpy- Plugin verwenden.
Mit diesen Plugins erhalten Sie Haltepunkte mit einfachen Tastenanschlägen (
\ b
in Vim undC-c C-u b
in Emacs) sowie vielen anderen Funktionen von schwergewichtigen IDEs (Code-Faltung, Refactoring, Flusen usw.) - alles in einem leichten Terminal-basierten Texteditor.quelle
Der einfachste Weg, den Debugger in Ihrem Skript auszuführen, ist einfach
Das Ausführen von pdb auf einer Linux-Befehlszeile gibt
quelle
pdb
? Oder von wo?