Was macht Python Debugpy?
Verwenden Sie dies, wenn Python-Code interaktives Debugging benötigt: versteckte lokale Variablen, verwirrende Zustandsänderungen, fehlschlagende Tests, Subprozesse, langlebige Dienste oder Remote-/Headless-Attach.
Wählen Sie den kleinsten Debugger aus, der den fehlerhaften Rahmen erreicht.
Wählen
breakpoint(): lokaler Code, Quellcode-Änderungen okay, schnellster Weg.python3 -m pdb: keine Quellcode-Änderung, Start von Anfang an.python3 -m pdb -c continue: bei einer unbehandelten Ausnahme stoppen.debugpy: Remote-/Headless-Prozess, DAP-Client, bereits laufende PID oder Service-Startzeitwettlauf.
Befehle
python3 -m pdb path/to/script.py arg1
python3 -m pdb -c continue path/to/script.py
python3 -c "import debugpy" || python3 -m pip install debugpy
python3 -m debugpy --listen 127.0.0.1:5678 --wait-for-client path/to/script.py
python3 -m debugpy --listen 127.0.0.1:5678 --wait-for-client -m package.module
python3 -m debugpy --listen 127.0.0.1:5678 --pid <pid>
Für Quellcode-Änderungs-Attach:
import debugpy
debugpy.listen(("127.0.0.1", 5678))
debugpy.wait_for_client()
debugpy.breakpoint()
Für Post-Mortem:
import pdb, sys
try:
run()
except Exception:
pdb.post_mortem(sys.exc_info()[2])
raise
pdb
- Ablauf:
n,s,r,c,q. - Stack/Quelle:
w,u,d,a,l,ll. - Werte:
p expr,pp expr,display expr. - Haltepunkte:
b datei.py:42,b func,b datei.py:42, bedingung,cl <num>. - Ändern/Auswerten:
!anweisung; vollständiges REPL:interact.
Regeln
- Reproduzieren Sie zuerst mit dem kleinsten Befehl/Test.
- Deaktivieren Sie parallele Test-Worker für pdb; interaktives stdin funktioniert normalerweise nicht innerhalb von Worker-Pools.
- Behalten Sie
debugpyin der aktiven Umgebung; fügen Sie es nur dann als Projektabhängigkeit hinzu, wenn es das Projekt bereits benötigt. - Binden Sie Debug-Server an
127.0.0.1; setzen Sie0.0.0.0nur frei, wenn isoliert oder getunnelt. - Verwenden Sie für parallele Sitzungen eindeutige Ports.
debugpy --pidinjiziert in einen laufenden Prozess; bestätigen Sie die Ziel-PID vor dem Attach.- Falls PID-Attach unter Linux fehlschlägt, überprüfen Sie ptrace/Container-Berechtigungen, bevor Sie das Ziel ändern.
- Bereinigen Sie vor dem Commit:
rg -n 'breakpoint\(|pdb\.set_trace|debugpy\.' --type py. - Führen Sie das normale Projekt-Test/Gate ohne den Debugger erneut aus.
PYTHONBREAKPOINT=0deaktiviertbreakpoint().- Wenn ein Prozess nach dem Debugger-Detach hängt, stellen Sie sicher, dass er nicht noch an einem Haltepunkt pausiert.