ist jetzt verfügbar! Lesen Sie über die neuen Funktionen und Fehlerbehebungen vom November.

Debuggen von C++ in Visual Studio Code

Nachdem Sie die Grundlagen Ihrer Debugging-Umgebung gemäß den Konfigurations-Tutorials für jeden Zielcompiler/-plattform eingerichtet haben, können Sie in diesem Abschnitt mehr über das Debuggen von C/C++ erfahren.

Visual Studio Code unterstützt die folgenden Debugger für C/C++ abhängig vom verwendeten Betriebssystem

  • Linux: GDB
  • macOS: LLDB oder GDB
  • Windows: Der Visual Studio Windows Debugger oder GDB (mit Cygwin oder MinGW)

Windows-Debugging mit GDB

Sie können unter Windows erstellte Windows-Anwendungen mit Cygwin oder MinGW mithilfe von VS Code debuggen. Um die Debugging-Funktionen von Cygwin oder MinGW zu nutzen, muss der Debuggerpfad manuell in der Startkonfiguration (launch.json) festgelegt werden. Um Ihre Cygwin- oder MinGW-Anwendung zu debuggen, fügen Sie die Eigenschaft miDebuggerPath hinzu und setzen Sie deren Wert auf den Speicherort von gdb.exe für Ihre Cygwin- oder MinGW-Umgebung.

Zum Beispiel

    "miDebuggerPath": "c:\\mingw\\bin\\gdb.exe"

Cygwin/MinGW-Debugging unter Windows unterstützt sowohl Attach- als auch Launch-Debugging-Szenarien.

Weitere Informationen finden Sie unter C/C++ Debugging konfigurieren.

Wenn Sie mit GDB unter Windows debuggen, lesen Sie Windows-Debugging mit MinGW64.

Bedingte Haltepunkte

Bedingte Breakpoints ermöglichen es Ihnen, die Ausführung nur dann an einer bestimmten Codezeile zu unterbrechen, wenn der Wert der Bedingung WAHR ist. Um einen bedingten Breakpoint festzulegen, klicken Sie mit der rechten Maustaste auf einen vorhandenen Breakpoint und wählen Sie Breakpoint bearbeiten. Dies öffnet ein kleines Peek-Fenster, in dem Sie die Bedingung eingeben können, die WAHR sein muss, damit der Breakpoint während des Debuggens erreicht wird.

A conditional break

Im Editor werden bedingte Breakpoints durch ein Breakpoint-Symbol mit einem schwarzen Gleichheitszeichen darin angezeigt. Sie können den Cursor über einen bedingten Breakpoint bewegen, um dessen Bedingung anzuzeigen.

Funktionsbreakpoints

Funktionsbreakpoints ermöglichen es Ihnen, die Ausführung am Anfang einer Funktion anstatt an einer bestimmten Codezeile zu unterbrechen. Um einen Funktionsbreakpoint festzulegen, klicken Sie in der Ansicht Ausführen mit der rechten Maustaste in den Abschnitt Breakpoints, wählen Sie dann Funktionsbreakpoint hinzufügen und geben Sie den Namen der Funktion ein, an der Sie die Ausführung unterbrechen möchten.

Auswertung von Ausdrücken

VS Code unterstützt die Auswertung von Ausdrücken in mehreren Kontexten

  • Sie können einen Ausdruck in den Abschnitt Überwachen der Ansicht Ausführen eingeben, und er wird jedes Mal ausgewertet, wenn ein Breakpoint erreicht wird.
  • Sie können einen Ausdruck in die Debug-Konsole eingeben, und er wird nur einmal ausgewertet.
  • Sie können jeden Ausdruck auswerten, der in Ihrem Code erscheint, während Sie sich an einem Breakpoint befinden.

Ausdrücke im Abschnitt Überwachen wirken sich auf die zu debuggende Anwendung aus; ein Ausdruck, der den Wert einer Variablen ändert, ändert diese Variable für die Dauer des Programms.

Multi-Threaded Debugging

Die C/C++-Erweiterung für VS Code verfügt über die Möglichkeit, Multi-Threaded-Programme zu debuggen. Alle Threads und ihre Aufrufstapel werden im Abschnitt Aufrufstapel angezeigt.

Multi-threaded process

Memory Dump Debugging

Die C/C++-Erweiterung für VS Code verfügt auch über die Möglichkeit, Memory Dumps zu debuggen. Um einen Memory Dump zu debuggen, öffnen Sie Ihre launch.json-Datei und fügen Sie die Eigenschaft coreDumpPath (für GDB oder LLDB) oder dumpPath (für den Visual Studio Windows Debugger) zur C++ Launch-Konfiguration hinzu, setzen Sie deren Wert auf einen String, der den Pfad zum Memory Dump enthält. Dies funktioniert sogar für x86-Programme, die auf einer x64-Maschine debuggt werden.

Zusätzliche Symbole

Wenn es zusätzliche Verzeichnisse gibt, in denen der Debugger Symboldateien finden kann (z. B. .pdb-Dateien für den Visual Studio Windows Debugger), können diese durch Hinzufügen von additionalSOLibSearchPath (für GDB oder LLDB) oder symbolSearchPath (für den Visual Studio Windows Debugger) angegeben werden.

Zum Beispiel

    "additionalSOLibSearchPath": "/path/to/symbols;/another/path/to/symbols"

oder

    "symbolSearchPath": "C:\\path\\to\\symbols;C:\\another\\path\\to\\symbols"

Quellcodedateien finden

Der Speicherort der Quellcodedatei kann geändert werden, wenn die Quellcodedateien nicht am Kompilierungsort liegen. Dies geschieht durch einfache Ersetzungspaare, die im Abschnitt sourceFileMap hinzugefügt werden. Der erste Treffer in dieser Liste wird verwendet.

Zum Beispiel

"sourceFileMap": {
    "/build/gcc-4.8-fNUjSI/gcc-4.8-4.8.4/build/i686-linux-gnu/libstdc++-v3/include/i686-linux-gnu": "/usr/include/i686-linux-gnu/c++/4.8",
    "/build/gcc-4.8-fNUjSI/gcc-4.8-4.8.4/build/i686-linux-gnu/libstdc++-v3/include": "/usr/include/c++/4.8"
}

GDB, LLDB und LLDB-MI Befehle (GDB/LLDB)

Für die Debugging-Umgebung C++ (GDB/LLDB) können Sie GDB-, LLDB- und LLDB-MI-Befehle direkt über die Debug-Konsole mit dem Befehl -exec ausführen, aber seien Sie vorsichtig, die direkte Ausführung von Befehlen in der Debug-Konsole ist ungetestet und kann VS Code in einigen Fällen zum Absturz bringen.

Weitere Debugging-Funktionen

  • Unbedingte Breakpoints
  • Überwachungsfenster
  • Aufrufstapel
  • Schrittweise Ausführung

Weitere Informationen zum Debuggen mit VS Code finden Sie in dieser Einführung in das Debuggen in VS Code.

Weitere Möglichkeiten zur Konfiguration der launch.json-Datei, damit Sie Ihre C/C++-App debuggen können, finden Sie unter C/C++ Debugging konfigurieren.

Natvis-Framework

Mit dem Natvis-Framework erstellen Sie benutzerdefinierte Ansichten von C++-Objekten im Debugger. Sie können das Thema Benutzerdefinierte Ansichten für native Objekte lesen, um Details zur Verwendung von Natvis mit der C/C++-Erweiterung zu erfahren.

Remote-Debugging

Informationen zum Anhängen an einen Remote-Prozess, z. B. zum Debuggen eines Prozesses in einem Docker-Container, finden Sie unter Pipe-Transport.

Debuggen des Debuggers

Wenn Sie ein Debugging-Problem mit der Erweiterung haben, das wir anhand der Informationen in Ihrem Problembericht nicht diagnostizieren können, werden wir Sie möglicherweise bitten, die Protokollierung zu aktivieren und uns Ihre Protokolle zu senden. Lesen Sie Protokollierung für den Debug-Adapter aktivieren, um zu erfahren, wie Sie Protokolle der C/C++-Erweiterung erhalten.

Bekannte Einschränkungen

Symbole und Code-Navigation

Alle Plattformen

  • Da die Erweiterung keine Funktionskörper parst, funktionieren Definition anzeigen und Zur Definition springen nicht für Symbole, die innerhalb des Körpers einer Funktion definiert sind.

Debugging

Windows

  • GDB unter Cygwin und MinGW kann einen laufenden Prozess nicht unterbrechen. Um einen Breakpoint zu setzen, während die Anwendung läuft (nicht unter dem Debugger angehalten), oder um die zu debuggende Anwendung anzuhalten, drücken Sie Strg-C im Terminal der Anwendung.
  • GDB unter Cygwin kann keine Core-Dumps öffnen.

Linux

  • Sie sehen möglicherweise eine Fehlermeldung: ptrace: Operation not permitted. Dies liegt daran, dass GDB erhöhte Berechtigungen benötigt, um sich an einen Prozess anzuhängen. Dies kann mit den folgenden Lösungen behoben werden
    1. Beim Verwenden von An den Prozess anhängen müssen Sie Ihr Passwort eingeben, bevor die Debugging-Sitzung beginnen kann.

    2. Um diesen Fehler vorübergehend zu deaktivieren, verwenden Sie den folgenden Befehl

      echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope

    3. Um den Fehler dauerhaft zu beheben, fügen Sie eine Datei namens 10-ptrace.conf zu /etc/sysctl.d/ hinzu und fügen Sie die folgende Zeile hinzu: kernel.yama.ptrace_scope = 0.

macOS

  • LLDB
    • Beim Debuggen mit LLDB wird beim Schließen des Terminalfensters im Break-Modus das Debugging nicht beendet. Das Debugging kann durch Drücken der Schaltfläche Stoppen beendet werden.
    • Wenn das Debugging beendet ist, wird das Terminalfenster nicht geschlossen.
  • GDB
    • Zusätzliche manuelle Installationsschritte sind erforderlich, um GDB auf macOS zu verwenden. Siehe Manuelle Installation von GDB für OS X in der README.
    • Beim Anhängen an einen Prozess mit GDB kann die zu debuggende Anwendung nicht unterbrochen werden. GDB bindet nur Breakpoints, die gesetzt wurden, während die Anwendung nicht ausgeführt wurde (entweder vor dem Anhängen an die Anwendung oder während die Anwendung in einem angehaltenen Zustand ist). Dies liegt an einem Fehler in GDB.
    • Core-Dumps können beim Debuggen mit GDB nicht geladen werden, da GDB das auf macOS verwendete Core-Dump-Format nicht unterstützt.
    • Wenn Sie an einen Prozess mit GDB angehängt sind, beendet "Break All" den Prozess.

Nächste Schritte

Lesen Sie weiter, um mehr über Folgendes zu erfahren:

Wenn Sie weitere Fragen haben oder auf Probleme stoßen, erstellen Sie bitte ein Problem auf GitHub.

© . This site is unofficial and not affiliated with Microsoft.