Python-Debugging in VS Code
Die Python-Erweiterung unterstützt das Debugging für verschiedene Arten von Python-Anwendungen über die Python-Debugger-Erweiterung. Eine kurze Anleitung zu den Grundlagen des Debuggings finden Sie unter Tutorial - Den Debugger konfigurieren und ausführen. Siehe auch das Flask-Tutorial. Beide Tutorials zeigen grundlegende Fertigkeiten wie das Setzen von Haltepunkten und das schrittweise Durchlaufen von Code.
Für allgemeine Debugging-Funktionen wie das Überprüfen von Variablen, das Setzen von Haltepunkten und andere Aktivitäten, die nicht sprachabhängig sind, lesen Sie den Artikel zum VS Code Debugging.
Dieser Artikel behandelt hauptsächlich Python-spezifische Debugging-Konfigurationen, einschließlich der notwendigen Schritte für bestimmte App-Typen und das Remote-Debugging.
Python-Debugger-Erweiterung
Die Python-Debugger-Erweiterung wird automatisch zusammen mit der Python-Erweiterung für VS Code installiert. Sie bietet Debugging-Funktionen mit debugpy für verschiedene Arten von Python-Anwendungen, einschließlich Skripten, Web-Apps, Remote-Prozessen und mehr.
Um zu überprüfen, ob sie installiert ist, öffnen Sie die Ansicht Erweiterungen (⇧⌘X (Windows, Linux Ctrl+Shift+X)) und suchen Sie nach @installed python debugger. Sie sollten die Python-Debugger-Erweiterung in den Ergebnissen sehen.

Informationen zu unterstützten Python-Versionen finden Sie auf der README-Seite der Erweiterung.
Konfigurationen initialisieren
Eine Konfiguration steuert das Verhalten von VS Code während einer Debugging-Sitzung. Konfigurationen werden in einer launch.json-Datei definiert, die in einem .vscode-Ordner in Ihrem Arbeitsbereich gespeichert ist.
Hinweis: Um die Debugging-Konfiguration zu ändern, muss Ihr Code in einem Ordner gespeichert sein.
Um Debug-Konfigurationen zu initialisieren, wählen Sie zunächst die Ansicht Ausführen und Debuggen in der Seitenleiste
![]()
Wenn Sie noch keine Konfigurationen definiert haben, sehen Sie eine Schaltfläche Ausführen und Debuggen sowie einen Link zum Erstellen einer Konfigurationsdatei (launch.json).

Um eine launch.json-Datei mit Python-Konfigurationen zu generieren, führen Sie die folgenden Schritte aus
-
Wählen Sie den Link launch.json-Datei erstellen (wie im Bild oben hervorgehoben) oder verwenden Sie den Menübefehl Ausführen > Konfigurationen öffnen.
-
Wählen Sie Python-Debugger aus der Liste der Debugger-Optionen.
-
Ein Konfigurationsmenü öffnet sich in der Befehlspalette, in dem Sie den Typ der Debug-Konfiguration auswählen können, die Sie für Ihr Python-Projekt verwenden möchten. Wenn Sie ein einzelnes Python-Skript debuggen möchten, wählen Sie Python-Datei in dem erscheinenden Menü Debug-Konfiguration auswählen.

Hinweis: Wenn Sie eine Debugging-Sitzung über das Debug-Panel, F5 oder Ausführen > Debugging starten starten, während keine Konfiguration existiert, wird ebenfalls das Debug-Konfigurationsmenü aufgerufen, aber es wird keine
launch.json-Datei erstellt. -
Die Python-Debugger-Erweiterung erstellt und öffnet daraufhin eine
launch.json-Datei, die eine vordefinierte Konfiguration basierend auf Ihrer vorherigen Auswahl enthält, in diesem Fall Python-Datei. Sie können Konfigurationen ändern (z. B. Argumente hinzufügen) und auch benutzerdefinierte Konfigurationen ergänzen.
Die Details der Konfigurationseigenschaften werden später in diesem Artikel unter Standardkonfiguration und -optionen behandelt. Weitere Konfigurationen werden ebenfalls in diesem Artikel unter Debugging spezifischer App-Typen beschrieben.
Zusätzliche Konfigurationen
Standardmäßig zeigt VS Code nur die gängigsten Konfigurationen an, die von der Python-Debugger-Erweiterung bereitgestellt werden. Sie können weitere Konfigurationen zur launch.json hinzufügen, indem Sie den Befehl Konfiguration hinzufügen in der Liste und im launch.json-Editor verwenden. Wenn Sie den Befehl verwenden, zeigt Ihnen VS Code eine Liste aller verfügbaren Konfigurationen an (stellen Sie sicher, dass Sie die Option Python auswählen).

Die Auswahl von Anhängen über Prozess-ID führt zu folgendem Ergebnis: 
Details zu all diesen Konfigurationen finden Sie unter Debugging spezifischer App-Typen.
Während des Debuggings zeigt die Statusleiste die aktuelle Konfiguration und den aktuellen Debugging-Interpreter an. Durch Klicken auf die Konfiguration wird eine Liste geöffnet, aus der Sie eine andere Konfiguration wählen können.

Standardmäßig verwendet der Debugger denselben Interpreter, der für Ihren Arbeitsbereich ausgewählt ist, genau wie andere Funktionen der Python-Erweiterung für VS Code. Um spezifisch für das Debugging einen anderen Interpreter zu verwenden, setzen Sie den Wert für python in der launch.json für die entsprechende Debugger-Konfiguration. Alternativ können Sie den Python-Interpreter-Indikator in der Statusleiste verwenden, um einen anderen auszuwählen.
Grundlagen des Debuggings
Wenn Sie nur ein Python-Skript debuggen möchten, ist der einfachste Weg, den Pfeil nach unten neben der Ausführen-Schaltfläche im Editor anzuklicken und Python-Debugger: Python-Datei debuggen auszuwählen.

Wenn Sie eine Webanwendung mit Flask, Django oder FastAPI debuggen möchten, bietet die Python-Debugger-Erweiterung dynamisch erstellte Debug-Konfigurationen basierend auf Ihrer Projektstruktur unter der Option Alle automatischen Debug-Konfigurationen anzeigen in der Ansicht Ausführen und Debuggen an.

Wenn Sie jedoch andere Arten von Anwendungen debuggen möchten, können Sie den Debugger über die Ansicht Ausführen starten, indem Sie auf die Schaltfläche Ausführen und Debuggen klicken.

Wenn noch keine Konfiguration festgelegt wurde, erhalten Sie eine Liste von Debugging-Optionen. Hier können Sie die passende Option auswählen, um Ihren Code schnell zu debuggen.
Zwei gängige Optionen sind die Verwendung der Konfiguration Python-Datei, um die aktuell geöffnete Python-Datei auszuführen, oder die Konfiguration Anhängen über Prozess-ID, um den Debugger an einen bereits laufenden Prozess anzuhängen.
Informationen zum Erstellen und Verwenden von Debugging-Konfigurationen finden Sie in den Abschnitten Konfigurationen initialisieren und Zusätzliche Konfigurationen. Sobald eine Konfiguration hinzugefügt wurde, kann sie aus der Dropdown-Liste ausgewählt und mit der Schaltfläche Debugging starten (F5) gestartet werden.

Debugging über die Befehlszeile
Der Debugger kann auch über die Befehlszeile gestartet werden, sofern debugpy in Ihrer Python-Umgebung installiert ist.
debugpy installieren
Sie können debugpy mit python -m pip install --upgrade debugpy in Ihrer Python-Umgebung installieren.
Obwohl die Verwendung einer virtuellen Umgebung nicht zwingend erforderlich ist, wird sie als bewährte Methode empfohlen. Sie können eine virtuelle Umgebung in VS Code erstellen, indem Sie die Befehlspalette (⇧⌘P (Windows, Linux Ctrl+Shift+P)) öffnen und den Befehl Python: Umgebung erstellen ausführen oder auf die Schaltfläche + in der Ansicht „Umgebungsmanager“ klicken.
Befehlszeilensyntax
Die Syntax für die Befehlszeile des Debuggers lautet wie folgt
python -m debugpy
--listen | --connect
[<host>:]<port>
[--wait-for-client]
[--configure-<name> <value>]...
[--log-to <path>] [--log-to-stderr]
<filename> | -m <module> | -c <code> | --pid <pid>
[<arg>]...
Beispiel
Über die Befehlszeile können Sie den Debugger mit einem bestimmten Port (5678) und einem Skript mit der folgenden Syntax starten. Dieses Beispiel geht davon aus, dass das Skript lange läuft, und lässt das Flag --wait-for-client weg, was bedeutet, dass das Skript nicht darauf wartet, dass sich der Client anhängt.
python -m debugpy --listen 5678 ./myscript.py
Sie würden dann die folgende Konfiguration verwenden, um sich von der VS Code Python-Debugger-Erweiterung aus zu verbinden.
{
"name": "Python Debugger: Attach",
"type": "debugpy",
"request": "attach",
"connect": {
"host": "localhost",
"port": 5678
}
}
Hinweis: Die Angabe des Hosts ist für listen optional, standardmäßig wird 127.0.0.1 verwendet.
Wenn Sie Remote-Code oder Code, der in einem Docker-Container läuft, debuggen möchten, müssten Sie auf dem Remote-Computer oder im Container den vorherigen CLI-Befehl anpassen, um einen Host anzugeben.
python -m debugpy --listen 0.0.0.0:5678 ./myscript.py
Die zugehörige Konfigurationsdatei würde dann wie folgt aussehen.
{
"name": "Attach",
"type": "debugpy",
"request": "attach",
"connect": {
"host": "remote-machine-name", // replace this with remote machine name
"port": 5678
}
}
Hinweis: Seien Sie sich bewusst, dass Sie durch die Angabe eines anderen Host-Werts als
127.0.0.1oderlocalhosteinen Port öffnen, um den Zugriff von jedem Computer aus zu ermöglichen, was Sicherheitsrisiken birgt. Sie sollten sicherstellen, dass Sie angemessene Sicherheitsvorkehrungen treffen, wie z. B. die Verwendung von SSH-Tunneln, wenn Sie Remote-Debugging durchführen.
Befehlszeilenoptionen
| Flag | Optionen | Beschreibung |
|---|---|---|
| --listen oder --connect | [<host>:]<port> |
Erforderlich. Gibt die Host-Adresse und den Port an, an dem der Debug-Adapter-Server auf eingehende Verbindungen warten soll (--listen) oder sich mit einem Client verbinden soll, der auf eine eingehende Verbindung wartet (--connect). Dies ist dieselbe Adresse, die in der VS Code-Debug-Konfiguration verwendet wird. Standardmäßig ist die Host-Adresse localhost (127.0.0.1). |
| --wait-for-client | keine | Optional. Gibt an, dass der Code nicht ausgeführt werden soll, bis eine Verbindung vom Debug-Server besteht. Diese Einstellung ermöglicht es Ihnen, ab der ersten Zeile Ihres Codes zu debuggen. |
| --log-to | <path> |
Optional. Gibt einen Pfad zu einem bestehenden Verzeichnis zum Speichern von Protokollen an. |
| --log-to-stderr | keine | Optional. Ermöglicht es debugpy, Protokolle direkt nach stderr zu schreiben. |
| --pid | <pid> |
Optional. Gibt einen bereits laufenden Prozess an, in den der Debug-Server injiziert werden soll. |
| --configure-<name> | <value> |
Optional. Legt eine Debug-Eigenschaft fest, die dem Debug-Server bekannt sein muss, bevor der Client eine Verbindung herstellt. Solche Eigenschaften können direkt in der launch-Konfiguration verwendet werden, müssen aber bei attach-Konfigurationen auf diese Weise gesetzt werden. Wenn Sie z. B. nicht möchten, dass sich der Debug-Server automatisch in Subprozesse injiziert, die von dem Prozess erstellt werden, an den Sie sich anhängen, verwenden Sie --configure-subProcess false. |
Hinweis:
[<arg>]kann verwendet werden, um Befehlszeilenargumente an die zu startende App zu übergeben.
Debugging durch Anhängen über eine Netzwerkverbindung
Lokales Skript-Debugging
Es kann Fälle geben, in denen Sie ein Python-Skript debuggen müssen, das lokal von einem anderen Prozess aufgerufen wird. Zum Beispiel könnten Sie einen Webserver debuggen, der verschiedene Python-Skripte für spezifische Verarbeitungsaufträge ausführt. In solchen Fällen müssen Sie den VS Code-Debugger an das Skript anhängen, sobald es gestartet wurde.
-
Führen Sie VS Code aus, öffnen Sie den Ordner oder Arbeitsbereich, der das Skript enthält, und erstellen Sie eine
launch.jsonfür diesen Arbeitsbereich, falls noch keine existiert. -
Fügen Sie im Skriptcode Folgendes hinzu und speichern Sie die Datei
import debugpy # 5678 is the default attach port in the VS Code debug configurations. Unless a host and port are specified, host defaults to 127.0.0.1 debugpy.listen(5678) print("Waiting for debugger attach") debugpy.wait_for_client() debugpy.breakpoint() print('break on this line') -
Öffnen Sie ein Terminal mit Terminal: Neues Terminal erstellen, wodurch die ausgewählte Umgebung des Skripts aktiviert wird.
-
Installieren Sie im Terminal das debugpy-Paket.
-
Starten Sie im Terminal Python mit dem Skript, zum Beispiel
python3 myscript.py. Sie sollten die Meldung "Waiting for debugger attach" sehen, die im Code enthalten ist, und das Skript hält am Aufrufdebugpy.wait_for_client()an. -
Wechseln Sie in die Ansicht Ausführen und Debuggen (⇧⌘D (Windows, Linux Ctrl+Shift+D)), wählen Sie die entsprechende Konfiguration aus der Dropdown-Liste des Debuggers und starten Sie den Debugger.
-
Der Debugger sollte am Aufruf
debugpy.breakpoint()anhalten, ab dem Sie den Debugger normal verwenden können. Sie haben auch die Möglichkeit, über die Benutzeroberfläche andere Haltepunkte im Skriptcode zu setzen, anstattdebugpy.breakpoint()zu verwenden.
Remote-Skript-Debugging mit SSH
Remote-Debugging ermöglicht es Ihnen, ein Programm lokal in VS Code schrittweise zu durchlaufen, während es auf einem Remote-Computer ausgeführt wird. Es ist nicht notwendig, VS Code auf dem Remote-Computer zu installieren. Für zusätzliche Sicherheit möchten oder müssen Sie möglicherweise eine sichere Verbindung, wie SSH, zum Remote-Computer verwenden, wenn Sie debuggen.
Hinweis: Auf Windows-Computern müssen Sie möglicherweise Windows 10 OpenSSH installieren, um den
ssh-Befehl verfügbar zu haben.
Die folgenden Schritte skizzieren den allgemeinen Prozess zur Einrichtung eines SSH-Tunnels. Ein SSH-Tunnel ermöglicht es Ihnen, auf Ihrem lokalen Computer so zu arbeiten, als würden Sie direkt auf dem Remote-Computer arbeiten, und zwar auf sicherere Weise, als wenn ein Port für den öffentlichen Zugriff geöffnet wäre.
Auf dem Remote-Computer
-
Aktivieren Sie die Portweiterleitung, indem Sie die Konfigurationsdatei
sshd_configöffnen (zu finden unter/etc/ssh/auf Linux und unter%programfiles(x86)%/openssh/etcauf Windows) und die folgende Einstellung hinzufügen oder ändern:AllowTcpForwarding yesHinweis: Der Standardwert für AllowTcpForwarding ist „yes“, daher müssen Sie möglicherweise keine Änderung vornehmen.
-
Wenn Sie
AllowTcpForwardinghinzufügen oder ändern mussten, starten Sie den SSH-Server neu. Unter Linux/macOS führen Siesudo service ssh restartaus; unter Windows führen Sieservices.mscaus, wählen Sie OpenSSH odersshdin der Liste der Dienste und wählen Sie Neu starten.
Auf dem lokalen Computer
-
Erstellen Sie einen SSH-Tunnel, indem Sie
ssh -2 -L Zielport:localhost:Zielport -i Identitätsdatei Benutzer@Remoteadresseausführen, wobei Sie einen gewählten Port fürZielportsowie den entsprechenden Benutzernamen und die IP-Adresse des Remote-Computers unterBenutzer@Remoteadresseverwenden. Um beispielsweise Port 5678 auf der IP-Adresse 1.2.3.4 zu verwenden, lautet der Befehlssh -2 -L 5678:localhost:5678 -i Identitätsdatei benutzer@1.2.3.4. Sie können den Pfad zu einer Identitätsdatei mit dem Flag-iangeben. -
Überprüfen Sie, ob Sie eine Eingabeaufforderung in der SSH-Sitzung sehen können.
-
Erstellen Sie in Ihrem VS Code-Arbeitsbereich eine Konfiguration für Remote-Debugging in Ihrer
launch.json-Datei und setzen Sie den Port auf den Port, der imssh-Befehl verwendet wurde, und den Host auflocalhost. Sie verwenden hierlocalhost, weil Sie den SSH-Tunnel eingerichtet haben.{ "name": "Python Debugger: Attach", "type": "debugpy", "request": "attach", "port": 5678, "host": "localhost", "pathMappings": [ { "localRoot": "${workspaceFolder}", // Maps C:\Users\user1\project1 "remoteRoot": "." // To current working directory ~/project1 } ] }
Debugging starten
Nachdem ein SSH-Tunnel zum Remote-Computer eingerichtet wurde, können Sie mit dem Debugging beginnen.
-
Beide Computer: Stellen Sie sicher, dass identischer Quellcode verfügbar ist.
-
Beide Computer: debugpy installieren.
-
Remote-Computer: Es gibt zwei Möglichkeiten, festzulegen, wie man sich an den Remote-Prozess anhängt.
-
Fügen Sie im Quellcode die folgenden Zeilen hinzu und ersetzen Sie
Adressedurch die IP-Adresse und Portnummer des Remote-Computers (IP-Adresse 1.2.3.4 dient hier nur zur Veranschaulichung).import debugpy # Allow other computers to attach to debugpy at this IP address and port. debugpy.listen(('1.2.3.4', 5678)) # Pause the program until a remote debugger is attached debugpy.wait_for_client()Die in
listenverwendete IP-Adresse sollte die private IP-Adresse des Remote-Computers sein. Sie können das Programm dann normal starten, wodurch es pausiert, bis sich der Debugger anhängt. -
Starten Sie den Remote-Prozess über debugpy, zum Beispiel
python3 -m debugpy --listen 1.2.3.4:5678 --wait-for-client -m myprojectDies startet das Paket
meinprojektmitpython3, wobei die private IP-Adresse des Remote-Computers1.2.3.4lautet und auf Port5678gewartet wird (Sie können den Remote-Python-Prozess auch starten, indem Sie einen Dateipfad anstelle von-mangeben, wie zum Beispiel./hallo.py).
-
-
Lokaler Computer: Nur wenn Sie den Quellcode auf dem Remote-Computer wie oben beschrieben geändert haben, fügen Sie im Quellcode eine auskommentierte Kopie desselben Codes hinzu, der auf dem Remote-Computer hinzugefügt wurde. Das Hinzufügen dieser Zeilen stellt sicher, dass der Quellcode auf beiden Computern Zeile für Zeile übereinstimmt.
#import debugpy # Allow other computers to attach to debugpy at this IP address and port. #debugpy.listen(('1.2.3.4', 5678)) # Pause the program until a remote debugger is attached #debugpy.wait_for_client() -
Lokaler Computer: Wechseln Sie in die Ansicht Ausführen und Debuggen (⇧⌘D (Windows, Linux Ctrl+Shift+D)) in VS Code, wählen Sie die Konfiguration Python-Debugger: Anhängen.
-
Lokaler Computer: Setzen Sie einen Haltepunkt in den Code, an dem Sie mit dem Debugging beginnen möchten.
-
Lokaler Computer: Starten Sie den VS Code-Debugger mit der angepassten Konfiguration Python-Debugger: Anhängen und der Schaltfläche "Debugging starten". VS Code sollte an Ihren lokal gesetzten Haltepunkten anhalten, sodass Sie den Code schrittweise durchlaufen, Variablen untersuchen und alle anderen Debugging-Aktionen durchführen können. Ausdrücke, die Sie in der Debug-Konsole eingeben, werden ebenfalls auf dem Remote-Computer ausgeführt.
Die Textausgabe an stdout, wie von
print-Anweisungen, erscheint auf beiden Computern. Andere Ausgaben, wie grafische Diagramme aus einem Paket wie matplotlib, erscheinen jedoch nur auf dem Remote-Computer. -
Während des Remote-Debuggings erscheint die Debugging-Symbolleiste wie unten gezeigt

In dieser Symbolleiste stoppt die Schaltfläche zum Trennen (⇧F5 (Windows, Linux Shift+F5)) den Debugger und ermöglicht es dem Remote-Programm, bis zum Abschluss zu laufen. Die Schaltfläche zum Neustarten (⇧⌘F5 (Windows, Linux Ctrl+Shift+F5)) startet den Debugger auf dem lokalen Computer neu, startet das Remote-Programm aber nicht neu. Verwenden Sie die Neustart-Schaltfläche nur, wenn Sie das Remote-Programm bereits neu gestartet haben und den Debugger erneut anhängen müssen.
Konfigurationsoptionen festlegen
Wenn Sie launch.json zum ersten Mal erstellen, gibt es zwei Standardkonfigurationen, die die aktive Datei im Editor entweder im integrierten Terminal (innerhalb von VS Code) oder im externen Terminal (außerhalb von VS Code) ausführen.
{
"configurations": [
{
"name": "Python Debugger: Current File (Integrated Terminal)",
"type": "debugpy",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal"
},
{
"name": "Python Debugger: Current File (External Terminal)",
"type": "debugpy",
"request": "launch",
"program": "${file}",
"console": "externalTerminal"
}
]
}
Die spezifischen Einstellungen werden in den folgenden Abschnitten beschrieben. Sie können auch andere Einstellungen hinzufügen, wie args, die nicht in den Standardkonfigurationen enthalten sind.
Tipp: Es ist oft hilfreich in einem Projekt, eine Konfiguration zu erstellen, die eine bestimmte Startdatei ausführt. Wenn Sie beispielsweise immer
start.pymit den Argumenten--port 1593starten möchten, wenn Sie den Debugger starten, erstellen Sie einen Konfigurationseintrag wie folgt
{
"name": "Python Debugger: startup.py",
"type": "debugpy",
"request": "launch",
"program": "${workspaceFolder}/startup.py",
"args" : ["--port", "1593"]
},
name
Bietet den Namen für die Debug-Konfiguration, der in der VS Code-Dropdown-Liste erscheint.
type
Identifiziert den zu verwendenden Debugger-Typ; lassen Sie dies für das Debuggen von Python-Code auf debugpy eingestellt.
request
Gibt den Modus an, in dem das Debugging gestartet werden soll
launch: Startet den Debugger für die Datei, die unterprogramangegeben istattach: Hängt den Debugger an einen bereits laufenden Prozess an. Siehe Remote-Debugging für ein Beispiel.
program
Gibt den voll qualifizierten Pfad zum Einstiegsmodul (Startdatei) des Python-Programms an. Der Wert ${file}, der oft in Standardkonfigurationen verwendet wird, nutzt die aktuell aktive Datei im Editor. Durch Angabe einer spezifischen Startdatei können Sie immer sicher sein, dass Ihr Programm mit demselben Einstiegspunkt gestartet wird, unabhängig davon, welche Dateien geöffnet sind. Zum Beispiel
"program": "/Users/Me/Projects/MyProject/src/event_handlers/__init__.py",
Sie können sich auch auf einen relativen Pfad vom Arbeitsbereich-Stammverzeichnis aus verlassen. Wenn das Stammverzeichnis beispielsweise /Users/Ich/Projekte/MeinProjekt ist, können Sie das folgende Beispiel verwenden
"program": "${workspaceFolder}/src/event_handlers/__init__.py",
module
Bietet die Möglichkeit, den Namen eines Moduls anzugeben, das debuggt werden soll, ähnlich wie das -m Argument beim Start über die Befehlszeile. Weitere Informationen finden Sie bei Python.org
python
Der vollständige Pfad zum Python-Interpreter, der für das Debugging verwendet werden soll.
Wenn nicht angegeben, verwendet diese Einstellung standardmäßig den für Ihren Arbeitsbereich ausgewählten Interpreter, was dem Wert ${command:python.interpreterPath} entspricht. Um einen anderen Interpreter zu verwenden, geben Sie dessen Pfad in der Eigenschaft python einer Debug-Konfiguration an.
Alternativ können Sie eine benutzerdefinierte Umgebungsvariable verwenden, die auf jeder Plattform definiert ist, um den vollständigen Pfad zum zu verwendenden Python-Interpreter zu enthalten, sodass keine weiteren Ordnerpfade benötigt werden.
Wenn Sie Argumente an den Python-Interpreter übergeben müssen, können Sie die Eigenschaft pythonArgs verwenden.
pythonArgs
Gibt Argumente an, die an den Python-Interpreter übergeben werden sollen, unter Verwendung der Syntax "pythonArgs": ["<arg 1>", "<arg 2>",...].
args
Gibt Argumente an, die an das Python-Programm übergeben werden sollen. Jedes Element der Argumentzeichenfolge, das durch ein Leerzeichen getrennt ist, sollte in Anführungszeichen gesetzt werden, zum Beispiel
"args": ["--quiet", "--norepeat", "--port", "1593"],
Wenn Sie pro Debug-Lauf unterschiedliche Argumente bereitstellen möchten, können Sie args auf "${command:pickArgs}" setzen. Sie werden dann bei jedem Start einer Debug-Sitzung aufgefordert, Argumente einzugeben.
Hinweis: Es gibt einen Unterschied darin, wie
"${command:pickArgs}"und["${command:pickArgs}"]analysiert werden, insbesondere bei der Verwendung von[]. Als Array werden alle Argumente als ein einzelner String übergeben; ohne Klammern wird jedes Argument als eigener String übergeben.
stopOnEntry
Wenn auf true gesetzt, hält der Debugger an der ersten Zeile des zu debuggenden Programms an. Wenn weggelassen (Standard) oder auf false gesetzt, führt der Debugger das Programm bis zum ersten Haltepunkt aus.
console
Gibt an, wie die Programmausgabe angezeigt wird, solange die Standardwerte für redirectOutput nicht geändert werden.
| Wert | Wo die Ausgabe angezeigt wird |
|---|---|
"internalConsole" |
VS Code-Debug-Konsole. Wenn redirectOutput auf False gesetzt ist, wird keine Ausgabe angezeigt. |
"integratedTerminal" (Standard) |
VS Code-integriertes Terminal. Wenn redirectOutput auf True gesetzt ist, wird die Ausgabe auch in der Debug-Konsole angezeigt. |
"externalTerminal" |
Separates Konsolenfenster. Wenn redirectOutput auf True gesetzt ist, wird die Ausgabe auch in der Debug-Konsole angezeigt. |
purpose
Es gibt mehr als eine Möglichkeit, die Ausführen-Schaltfläche zu konfigurieren, indem Sie die Option purpose verwenden. Das Setzen der Option auf debug-test definiert, dass die Konfiguration beim Debuggen von Tests in VS Code verwendet werden soll. Das Setzen der Option auf debug-in-terminal hingegen definiert, dass die Konfiguration nur verwendet werden soll, wenn Sie auf die Schaltfläche Python-Datei ausführen oben rechts im Editor zugreifen (unabhängig davon, ob die von der Schaltfläche bereitgestellten Optionen Python-Datei ausführen oder Python-Datei debuggen verwendet werden). Hinweis: Die Option purpose kann nicht verwendet werden, um den Debugger über F5 oder Ausführen > Debugging starten zu starten.
autoReload
Ermöglicht das automatische Neuladen des Debuggers, wenn Änderungen am Code vorgenommen werden, nachdem die Debugger-Ausführung einen Haltepunkt erreicht hat. Um diese Funktion zu aktivieren, setzen Sie {"enable": true} wie im folgenden Code gezeigt.
{
"name": "Python Debugger: Current File",
"type": "debugpy",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal",
"autoReload": {
"enable": true
}
}
Hinweis: Wenn der Debugger ein Neuladen durchführt, kann Code, der beim Import ausgeführt wird, erneut ausgeführt werden. Um diese Situation zu vermeiden, versuchen Sie, in Ihrem Modul nur Importe, Konstanten und Definitionen zu verwenden und jeglichen Code in Funktionen zu legen. Alternativ können Sie auch
if __name__=="__main__"-Prüfungen verwenden.
subProcess
Gibt an, ob das Subprozess-Debugging aktiviert werden soll. Standardmäßig false, auf true setzen, um es zu aktivieren. Weitere Informationen finden Sie unter Multi-Target-Debugging.
cwd
Gibt das aktuelle Arbeitsverzeichnis für den Debugger an, das der Basisordner für alle im Code verwendeten relativen Pfade ist. Wenn weggelassen, standardmäßig ${workspaceFolder} (der in VS Code geöffnete Ordner).
Nehmen wir als Beispiel an, ${workspaceFolder} enthält einen py_code-Ordner mit app.py und einen data-Ordner mit salaries.csv. Wenn Sie den Debugger für py_code/app.py starten, variieren die relativen Pfade zur Datendatei je nach Wert von cwd
| cwd | Relativer Pfad zur Datendatei |
|---|---|
Weggelassen oder ${workspaceFolder} |
data/salaries.csv |
${workspaceFolder}/py_code |
../data/salaries.csv |
${workspaceFolder}/data |
salaries.csv |
redirectOutput
Wenn auf true gesetzt (Standard für internalConsole), veranlasst dies den Debugger, alle Ausgaben des Programms in das VS Code-Debug-Ausgabefenster zu drucken. Wenn auf false gesetzt (Standard für integratedTerminal und externalTerminal), wird die Programmausgabe nicht im Debugger-Ausgabefenster angezeigt.
Diese Option wird normalerweise deaktiviert, wenn "console": "integratedTerminal" oder "console": "externalTerminal" verwendet wird, da es nicht nötig ist, die Ausgabe in der Debug-Konsole zu duplizieren.
justMyCode
Wenn weggelassen oder auf true gesetzt (Standard), beschränkt dies das Debugging nur auf benutzergeschriebenen Code. Setzen Sie auf false, um auch das Debugging von Standardbibliotheksfunktionen zu ermöglichen.
django
Wenn auf true gesetzt, werden Debugging-Funktionen aktiviert, die spezifisch für das Django-Webframework sind.
sudo
Wenn auf true gesetzt und mit "console": "externalTerminal" verwendet, ermöglicht dies das Debuggen von Apps, die erhöhte Berechtigungen erfordern. Die Verwendung einer externen Konsole ist notwendig, um das Passwort abzufragen.
pyramid
Wenn auf true gesetzt, wird sichergestellt, dass eine Pyramid-App mit dem notwendigen pserve-Befehl gestartet wird.
env
Legt optionale Umgebungsvariablen für den Debugger-Prozess fest, zusätzlich zu Systemumgebungsvariablen, die der Debugger immer erbt. Die Werte für diese Variablen müssen als Strings eingegeben werden.
envFile
Optionaler Pfad zu einer Datei, die Definitionen von Umgebungsvariablen enthält. Siehe Python-Umgebungen konfigurieren - Definitionsdatei für Umgebungsvariablen.
gevent
Wenn auf true gesetzt, ermöglicht dies das Debugging von gevent monkey-patched Code.
jinja
Wenn auf true gesetzt, werden Debugging-Funktionen aktiviert, die spezifisch für das Jinja-Templating-Framework sind.
Haltepunkte (Breakpoints) und Logpunkte
Die Python-Debugger-Erweiterung unterstützt Haltepunkte und Logpunkte zum Debuggen von Code. Eine kurze Anleitung zu den Grundlagen des Debuggings und der Verwendung von Haltepunkten finden Sie unter Tutorial - Den Debugger konfigurieren und ausführen.
Bedingte Haltepunkte
Haltepunkte können auch so eingestellt werden, dass sie basierend auf Ausdrücken, Trefferanzahlen oder einer Kombination aus beidem ausgelöst werden. Die Python-Debugger-Erweiterung unterstützt Trefferanzahlen, die Ganzzahlen sind, zusätzlich zu Ganzzahlen, denen die Operatoren ==, >, >=, <, <= und % vorangestellt sind. Sie könnten beispielsweise einen Haltepunkt so einstellen, dass er nach fünf Vorkommen ausgelöst wird, indem Sie eine Trefferanzahl von >5 festlegen. Weitere Informationen finden Sie unter bedingte Haltepunkte im Hauptartikel zum VS Code-Debugging.
Einen Haltepunkt im Code aufrufen
In Ihrem Python-Code können Sie debugpy.breakpoint() an jedem Punkt aufrufen, an dem Sie den Debugger während einer Debugging-Sitzung anhalten möchten.
Überprüfung von Haltepunkten
Die Python-Debugger-Erweiterung erkennt automatisch Haltepunkte, die auf nicht ausführbaren Zeilen gesetzt sind, wie pass-Anweisungen oder inmitten einer mehrzeiligen Anweisung. In solchen Fällen verschiebt das Ausführen des Debuggers den Haltepunkt zur nächsten gültigen Zeile, um sicherzustellen, dass die Codeausführung an diesem Punkt stoppt.
Debugging spezifischer App-Typen
Die Konfigurations-Dropdown-Liste bietet verschiedene Optionen für allgemeine App-Typen
| Konfiguration | Beschreibung |
|---|---|
| Anfügen | Siehe Remote-Debugging im vorherigen Abschnitt. |
| Django | Gibt "program": "${workspaceFolder}/manage.py", "args": ["runserver"] an. Fügt außerdem "django": true hinzu, um das Debuggen von Django-HTML-Templates zu ermöglichen. |
| Flask | Siehe Flask-Debugging unten. |
| Gevent | Fügt "gevent": true zur Standardkonfiguration für das integrierte Terminal hinzu. |
| Pyramid | Entfernt program, fügt "args": ["${workspaceFolder}/development.ini"] hinzu, fügt "jinja": true zur Aktivierung des Template-Debuggings hinzu und fügt "pyramid": true hinzu, um sicherzustellen, dass das Programm mit dem notwendigen pserve-Befehl gestartet wird. |
Spezifische Schritte sind auch für Remote-Debugging und Google App Engine erforderlich. Details zum Debuggen von Tests finden Sie unter Testen.
Um eine App zu debuggen, die Administratorrechte erfordert, verwenden Sie "console": "externalTerminal" und "sudo": "True".
Flask-Debugging
{
"name": "Python Debugger: Flask",
"type": "debugpy",
"request": "launch",
"module": "flask",
"env": {
"FLASK_APP": "app.py"
},
"args": [
"run",
"--no-debugger"
],
"jinja": true
},
Wie Sie sehen können, gibt diese Konfiguration "env": {"FLASK_APP": "app.py"} und "args": ["run", "--no-debugger"] an. Die Eigenschaft "module": "flask" wird anstelle von program verwendet. (Möglicherweise sehen Sie "FLASK_APP": "${workspaceFolder}/app.py" in der env-Eigenschaft; ändern Sie die Konfiguration in diesem Fall so, dass sie nur auf den Dateinamen verweist. Andernfalls könnten "Cannot import module C"-Fehler auftreten, wobei C ein Laufwerksbuchstabe ist.)
Die Einstellung "jinja": true aktiviert auch das Debugging für die standardmäßige Jinja-Template-Engine von Flask.
Wenn Sie den Flask-Entwicklungsserver im Entwicklungsmodus ausführen möchten, verwenden Sie die folgende Konfiguration
{
"name": "Python Debugger: Flask (development mode)",
"type": "debugpy",
"request": "launch",
"module": "flask",
"env": {
"FLASK_APP": "app.py",
"FLASK_ENV": "development"
},
"args": [
"run"
],
"jinja": true
},
Fehlerbehebung
Es gibt viele Gründe, warum der Debugger möglicherweise nicht funktioniert. Manchmal offenbart die Debug-Konsole spezifische Ursachen, aber die Hauptgründe sind wie folgt
-
Stellen Sie sicher, dass die Python-Debugger-Erweiterung in VS Code installiert und aktiviert ist, indem Sie die Ansicht Erweiterungen (⇧⌘X (Windows, Linux Ctrl+Shift+X)) öffnen und nach
@installed python debuggersuchen. -
Der Pfad zum Python-Executable ist falsch: Überprüfen Sie den Pfad Ihres ausgewählten Interpreters, indem Sie den Befehl Python: Interpreter auswählen ausführen und sich den aktuellen Wert ansehen.

-
Sie haben
"type"auf den veralteten Wert"python"in Ihrerlaunch.json-Datei gesetzt: Ersetzen Sie"python"durch"debugpy", um mit der Python-Debugger-Erweiterung zu arbeiten. -
Es gibt ungültige Ausdrücke im Überwachungsfenster (Watch): Löschen Sie alle Ausdrücke aus dem Überwachungsfenster und starten Sie den Debugger neu.
-
Wenn Sie mit einer Multithread-App arbeiten, die native Thread-APIs verwendet (wie die Win32-Funktion
CreateThreadanstelle der Python-Threading-APIs), ist es derzeit notwendig, den folgenden Quellcode am Anfang der Datei einzufügen, die Sie debuggen möchtenimport debugpy debugpy.debug_this_thread() -
Wenn Sie mit einem Linux-System arbeiten, erhalten Sie möglicherweise eine "timed out"-Fehlermeldung, wenn Sie versuchen, einen Debugger an einen laufenden Prozess anzuhängen. Um dies zu verhindern, können Sie vorübergehend den folgenden Befehl ausführen
echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
Nächste Schritte
- Python-Umgebungen - Steuert, welcher Python-Interpreter zum Bearbeiten und Debuggen verwendet wird.
- Testen - Konfigurieren Sie Testumgebungen und entdecken, führen Sie Tests aus und debuggen Sie sie.
- Einstellungenreferenz – Erkunden Sie die gesamte Bandbreite der Python-bezogenen Einstellungen in VS Code.
- Allgemeines Debugging - Erfahren Sie mehr über die Debugging-Funktionen von VS Code.