C/C++ Debugging konfigurieren
Eine launch.json-Datei wird verwendet, um den Debugger in Visual Studio Code zu konfigurieren.
Visual Studio Code generiert eine launch.json (unter einem .vscode-Ordner in Ihrem Projekt) mit fast allen erforderlichen Informationen. Um mit dem Debugging zu beginnen, müssen Sie das Feld program mit dem Pfad zur ausführbaren Datei, die Sie debuggen möchten, ausfüllen. Dies muss sowohl für die Start- als auch für die Anhangskonfigurationen (falls Sie sich zu einem bestimmten Zeitpunkt an eine laufende Instanz anhängen möchten) angegeben werden.
Die generierte Datei enthält zwei Abschnitte: einen, der das Debugging für den Start konfiguriert, und einen zweiten, der das Debugging für den Anhang konfiguriert.
Konfigurieren Sie das Debugging-Verhalten von VS Code
Legen Sie die folgenden Optionen fest oder ändern Sie sie, um das Verhalten von VS Code während des Debuggings zu steuern.
program (erforderlich)
Gibt den vollständigen Pfad zur ausführbaren Datei an, die der Debugger startet oder an die er sich anhängt. Der Debugger benötigt diesen Speicherort, um Debug-Symbole zu laden.
symbolSearchPath
Teilt dem Visual Studio Windows Debugger mit, in welchen Pfaden nach Symbol (.pdb)-Dateien gesucht werden soll. Trennen Sie mehrere Pfade mit einem Semikolon. Beispiel: "C:\\Symbole;C:\\SymbolVerz2".
requireExactSource
Ein optionales Flag, das dem Visual Studio Windows Debugger mitteilt, dass der aktuelle Quellcode mit der PDB-Datei übereinstimmen muss.
additionalSOLibSearchPath
Teilt GDB oder LLDB mit, in welchen Pfaden nach .so-Dateien gesucht werden soll. Trennen Sie mehrere Pfade mit einem Semikolon. Beispiel: "/Users/user/dir1;/Users/user/dir2".
externalConsole
Wird nur beim Starten des Debug-Ziels verwendet. Für attach ändert dieser Parameter das Verhalten des Debug-Ziels nicht.
- Windows: Wenn auf true gesetzt, wird eine externe Konsole gestartet. Wenn auf false gesetzt, wird das integrierte Terminal von VS Code verwendet.
- Linux: Wenn auf true gesetzt, wird VS Code benachrichtigt, eine externe Konsole zu starten. Wenn auf false gesetzt, wird das integrierte Terminal von VS Code verwendet.
- macOS: Wenn auf true gesetzt, wird eine externe Konsole über
lldb-migestartet. Wenn auf false gesetzt, kann die Ausgabe in der Debug-Konsole von VS Code angezeigt werden. Aufgrund von Einschränkungen inlldb-miist die Unterstützung für integrierte Terminals nicht verfügbar.
avoidWindowsConsoleRedirection
Um das integrierte Terminal von VS Code mit gdb unter Windows zu unterstützen, fügt die Erweiterung Konsolenumleitungsbefehle zu den Argumenten des Debug-Ziels hinzu, damit die Konsolenein- und -ausgabe im integrierten Terminal angezeigt wird. Das Setzen dieser Option auf true deaktiviert dies.
logging
Optionale Flags, um zu bestimmen, welche Arten von Meldungen in der Debug-Konsole protokolliert werden sollen.
- exceptions: Optionales Flag, um zu bestimmen, ob Ausnahmemeldungen in der Debug-Konsole protokolliert werden sollen. Standard ist true.
- moduleLoad: Optionales Flag, um zu bestimmen, ob Modulladeereignisse in der Debug-Konsole protokolliert werden sollen. Standard ist true.
- programOutput: Optionales Flag, um zu bestimmen, ob Programmausgaben in der Debug-Konsole protokolliert werden sollen. Standard ist true.
- engineLogging: Optionales Flag, um zu bestimmen, ob diagnostische Engine-Protokolle in der Debug-Konsole protokolliert werden sollen. Standard ist false.
- trace: Optionales Flag, um zu bestimmen, ob diagnostische Adapterbefehlsverfolgung in der Debug-Konsole protokolliert werden soll. Standard ist false.
- traceResponse: Optionales Flag, um zu bestimmen, ob diagnostische Adapterbefehls- und Antwortverfolgung in der Debug-Konsole protokolliert werden sollen. Standard ist false.
visualizerFile
.natvis-Datei, die beim Debugging verwendet werden soll. Siehe Benutzerdefinierte Ansichten nativer Objekte erstellen für Informationen zur Erstellung von Natvis-Dateien.
showDisplayString
Wenn eine visualizerFile angegeben ist, aktiviert showDisplayString die Anzeigestrecke. Das Aktivieren dieser Option kann während des Debuggings zu einer Verlangsamung führen.
Beispiel
{
"name": "C++ Launch (Windows)",
"type": "cppvsdbg",
"request": "launch",
"program": "C:\\app1\\Debug\\app1.exe",
"symbolSearchPath": "C:\\Symbols;C:\\SymbolDir2",
"externalConsole": true,
"logging": {
"moduleLoad": false,
"trace": true
},
"visualizerFile": "${workspaceFolder}/my.natvis",
"showDisplayString": true
}
Zielanwendung konfigurieren
Die folgenden Optionen ermöglichen es Ihnen, den Zustand der Zielanwendung beim Start zu ändern.
args
JSON-Array von Befehlszeilenargumenten, die beim Start an das Programm übergeben werden sollen. Beispiel ["arg1", "arg2"]. Wenn Sie Zeichen maskieren, müssen Sie sie doppelt maskieren. Zum Beispiel sendet ["{\\\"arg1\\\": true}"] {"arg1": true} an Ihre Anwendung.
cwd
Legt das Arbeitsverzeichnis der vom Debugger gestarteten Anwendung fest.
environment
Umgebungsvariablen, die zur Umgebung für das Programm hinzugefügt werden sollen. Beispiel: [ { "name": "config", "value": "Debug" } ], nicht [ { "config": "Debug" } ].
Beispiel
{
"name": "C++ Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/a.out",
"args": ["arg1", "arg2"],
"environment": [{ "name": "config", "value": "Debug" }],
"cwd": "${workspaceFolder}"
}
GDB oder LLDB anpassen
Sie können das Verhalten von GDB oder LLDB ändern, indem Sie die folgenden Optionen festlegen.
MIMode
Gibt den Debugger an, mit dem VS Code eine Verbindung herstellen wird. Muss auf gdb oder lldb gesetzt sein. Dies ist pro Betriebssystem vorkonfiguriert und kann bei Bedarf geändert werden.
miDebuggerPath
Der Pfad zum Debugger (z. B. gdb). Wenn nur die ausführbare Datei angegeben ist, wird auf der PATH-Variable des Betriebssystems nach einem Debugger gesucht (GDB unter Linux und Windows, LLDB unter OS X).
miDebuggerArgs
Zusätzliche Argumente, die an den Debugger (z. B. gdb) übergeben werden sollen.
stopAtEntry
Wenn auf true gesetzt, sollte der Debugger am Einstiegspunkt des Ziels stoppen (wird beim Anhängen ignoriert). Der Standardwert ist false.
stopAtConnect
Wenn auf true gesetzt, stoppt der Debugger nach der Verbindung mit dem Ziel. Wenn auf false gesetzt, fährt der Debugger nach der Verbindung fort. Der Standardwert ist false.
setupCommands
JSON-Array von Befehlen, die ausgeführt werden sollen, um GDB oder LLDB einzurichten. Beispiel: "setupCommands": [ { "text": "target-run", "description": "run target", "ignoreFailures": false }].
customLaunchSetupCommands
Wenn angegeben, ersetzt dies die Standardbefehle zum Starten eines Ziels durch andere Befehle. Dies kann beispielsweise "-target-attach" sein, um sich an einen Zielprozess anzuhängen. Eine leere Befehlsliste ersetzt die Startbefehle durch nichts, was nützlich sein kann, wenn dem Debugger Startoptionen als Befehlszeilenoptionen übergeben werden. Beispiel: "customLaunchSetupCommands": [ { "text": "target-run", "description": "run target", "ignoreFailures": false }].
launchCompleteCommand
Der Befehl, der ausgeführt werden soll, nachdem der Debugger vollständig eingerichtet ist, um den Zielprozess zum Laufen zu bringen. Zulässige Werte sind "exec-run", "exec-continue", "None". Der Standardwert ist "exec-run".
Beispiel
{
"name": "C++ Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/a.out",
"stopAtEntry": false,
"customLaunchSetupCommands": [
{ "text": "target-run", "description": "run target", "ignoreFailures": false }
],
"launchCompleteCommand": "exec-run",
"linux": {
"MIMode": "gdb",
"miDebuggerPath": "/usr/bin/gdb"
},
"osx": {
"MIMode": "lldb"
},
"windows": {
"MIMode": "gdb",
"miDebuggerPath": "C:\\MinGw\\bin\\gdb.exe"
}
}
symbolLoadInfo
- loadAll: Wenn true, werden Symbole für alle Libs geladen, andernfalls werden keine Solib-Symbole geladen. Modifiziert durch ExceptionList. Der Standardwert ist true.
- exceptionList: Liste von Dateinamen (Wildcards erlaubt), getrennt durch Semikolons
;. Modifiziert das Verhalten von LoadAll. Wenn LoadAll true ist, werden keine Symbole für Libs geladen, die einem Namen in der Liste entsprechen. Andernfalls werden nur Symbole für Libs geladen, die übereinstimmen. Beispiel:"foo.so;bar.so"
Dump-Dateien debuggen
Die C/C++-Erweiterung ermöglicht das Debuggen von Dump-Dateien unter Windows und Core-Dump-Dateien unter Linux und OS X.
dumpPath
Wenn Sie eine Windows-Dumpdatei debuggen möchten, setzen Sie dies auf den Pfad zur Dumpdatei, um das Debugging in der launch-Konfiguration zu starten.
coreDumpPath
Vollständiger Pfad zu einer Core-Dump-Datei, die für das angegebene Programm debuggt werden soll. Setzen Sie dies auf den Pfad zur Core-Dump-Datei, um das Debugging in der launch-Konfiguration zu starten. Hinweis: Das Debugging von Core-Dumps wird mit MinGw nicht unterstützt.
Remote-Debugging oder Debugging mit einem lokalen Debugger-Server
miDebuggerServerAddress
Netzwerkadresse des Debugger-Servers (z. B. gdbserver), mit dem für Remote-Debugging eine Verbindung hergestellt werden soll (Beispiel: localhost:1234).
debugServerPath
Vollständiger Pfad zum zu startenden Debug-Server.
debugServerArgs
Argumente für den Debugger-Server.
serverStarted
Muster für "Server gestartet", nach dem in der Ausgabe des Debug-Servers gesucht werden soll. Reguläre Ausdrücke werden unterstützt.
filterStdout
Wenn auf true gesetzt, wird der stdout-Stream nach dem Muster "Server gestartet" durchsucht und stdout wird an die Debug-Ausgabe protokolliert. Der Standardwert ist true.
filterStderr
Wenn auf true gesetzt, wird der stderr-Stream nach dem Muster "Server gestartet" durchsucht und stderr wird an die Debug-Ausgabe protokolliert. Der Standardwert ist false.
serverLaunchTimeout
Zeit in Millisekunden, die der Debugger auf den Start des DebugServers wartet. Standard ist 10000.
pipeTransport
Informationen zum Anhängen an einen Remote-Prozess, z. B. zum Debuggen eines Prozesses in einem Docker-Container, finden Sie im Artikel Pipe-Transport-Einstellungen.
hardwareBreakpoints
Wenn angegeben, steuert dies explizit das Verhalten von Hardware-Breakpoints für Remote-Ziele. Wenn require auf true gesetzt ist, werden immer Hardware-Breakpoints verwendet. Der Standardwert ist false. limit ist eine optionale Beschränkung der Anzahl der verfügbaren Hardware-Breakpoints, die verwendet werden können. Dies wird nur erzwungen, wenn require auf true und limit größer als 0 gesetzt ist. Der Standardwert ist 0. Beispiel: "hardwareBreakpoints": { require: true, limit: 6 }.
Zusätzliche Eigenschaften
processId
Standardmäßig ${command:pickProcess}, was eine Liste der verfügbaren Prozesse anzeigt, an die sich der Debugger anhängen kann. Wir empfehlen, diesen Standard beizubehalten, aber die Eigenschaft kann explizit auf eine bestimmte Prozess-ID gesetzt werden, an die sich der Debugger anhängen soll.
request
Gibt an, ob der Konfigurationsabschnitt dazu bestimmt ist, das Programm zu starten (launch) oder sich an eine bereits laufende Instanz anzuhängen (attach).
targetArchitecture
Veraltet Diese Option ist nicht mehr erforderlich, da die Zielarchitektur automatisch erkannt wird.
type
Gibt den zugrunde liegenden Debugger an, der verwendet wird. Muss cppvsdbg sein, wenn der Visual Studio Windows Debugger verwendet wird, und cppdbg, wenn GDB oder LLDB verwendet wird. Dies wird automatisch auf den richtigen Wert gesetzt, wenn die launch.json-Datei erstellt wird.
sourceFileMap
Dies ermöglicht die Abbildung von Compile-Zeit-Pfaden für Quellcode auf lokale Quellcode-Speicherorte. Es handelt sich um ein Objekt mit Schlüssel-Wert-Paaren und löst den ersten Pfad auf, der mit einer Zeichenfolge übereinstimmt. (Beispiel: "sourceFileMap": { "/mnt/c": "c:\\" } ordnet jeden Pfad, der vom Debugger zurückgegeben wird und mit /mnt/c beginnt, in c:\\ um. Sie können mehrere Zuordnungen im Objekt haben, diese werden jedoch in der angegebenen Reihenfolge verarbeitet.)
Datei mit Umgebungsvariablendefinitionen
Eine Datei mit Umgebungsvariablendefinitionen ist eine einfache Textdatei, die Schlüssel-Wert-Paare im Format umgebungsvariable=wert enthält, wobei # für Kommentare verwendet wird. Mehrzeilige Werte werden nicht unterstützt.
Die cppvsdbg-Debuggerkonfiguration enthält auch eine Eigenschaft envFile, mit der Sie Variablen zu Debugging-Zwecken einfach festlegen können.
Zum Beispiel
projekt.env-Datei:
# project.env
# Example environment with key as 'MYENVRIONMENTPATH' and value as C:\\Users\\USERNAME\\Project
MYENVRIONMENTPATH=C:\\Users\\USERNAME\\Project
# Variables with spaces
SPACED_OUT_PATH="C:\\This Has Spaces\\Project"
Symboloptionen
Das Element symbolOptions ermöglicht die Anpassung, wie der Debugger nach Symbolen sucht. Beispiel
"symbolOptions": {
"searchPaths": [
"C:\\src\\MyOtherProject\\bin\\debug",
"https://my-companies-symbols-server"
],
"searchMicrosoftSymbolServer": true,
"cachePath": "%TEMP%\\symcache",
"moduleFilter": {
"mode": "loadAllButExcluded",
"excludedModules": [ "DoNotLookForThisOne*.dll" ]
}
}
Eigenschaften
searchPaths: Array von Symbolserver-URLs (Beispiel: https://msdl.microsoft.com/download/symbols) oder Verzeichnissen (Beispiel: /build/symbols) nach .pdb-Dateien. Diese Verzeichnisse werden zusätzlich zu den Standardorten durchsucht - neben dem Modul und dem Pfad, zu dem die PDB ursprünglich abgelegt wurde.
searchMicrosoftSymbolServer: Wenn true, wird der Microsoft Symbol Server (https://msdl.microsoft.com/download/symbols) zum Suchpfad für Symbole hinzugefügt. Wenn nicht angegeben, ist diese Option standardmäßig false.
cachePath: Verzeichnis, in dem Symbole von Symbolservern heruntergeladen werden sollen. Wenn nicht angegeben, wählt der Debugger standardmäßig %TEMP%\SymbolCache..
moduleFilter.mode: Dieser Wert ist entweder "loadAllButExcluded" oder "loadOnlyIncluded". Im Modus "loadAllButExcluded" lädt der Debugger Symbole für alle Module, es sei denn, das Modul befindet sich im Array 'excludedModules'. Im Modus "loadOnlyIncluded" versucht der Debugger nicht, Symbole für IRGENDEIN Modul zu laden, es sei denn, es befindet sich im Array 'includedModules' oder es wird über die Einstellung 'includeSymbolsNextToModules' einbezogen.
Eigenschaften für den Modus "loadAllButExcluded"
moduleFilter.excludedModules: Array von Modulen, für die der Debugger KEINE Symbole laden soll. Wildcards (Beispiel: MyCompany.*.dll) sind unterstützt.
Eigenschaften für den Modus "loadOnlyIncluded"
moduleFilter.includedModules: Array von Modulen, für die der Debugger Symbole laden soll. Wildcards (Beispiel: MyCompany.*.dll) sind unterstützt.
moduleFilter.includeSymbolsNextToModules: Wenn true, prüft der Debugger für jedes Modul, das NICHT im Array 'includedModules' enthalten ist, weiterhin neben dem Modul selbst und der gestarteten ausführbaren Datei, prüft aber keine Pfade in der Symbolsuchliste. Diese Option ist standardmäßig auf 'true' gesetzt.