Verwendung von C++ und WSL in VS Code
In diesem Tutorial konfigurieren Sie Visual Studio Code für die Verwendung des C++-Compilers GCC (g++) und des GDB-Debuggers unter Ubuntu im Windows-Subsystem for Linux (WSL). GCC steht für GNU Compiler Collection; GDB ist der GNU-Debugger. WSL ist eine Linux-Umgebung unter Windows, die direkt auf der Maschinenhardware ausgeführt wird, nicht in einer virtuellen Maschine.
Hinweis: Ein Großteil dieses Tutorials ist für die Arbeit mit C++ und VS Code direkt auf einem Linux-Computer anwendbar.
Visual Studio Code unterstützt die direkte Arbeit in WSL mit der WSL-Erweiterung. Wir empfehlen diesen Modus der WSL-Entwicklung, bei dem alle Ihre Quellcodedateien neben dem Compiler auf der Linux-Distribution gehostet werden. Weitere Hintergründe finden Sie unter VS Code Remote Development.
Nach Abschluss dieses Tutorials sind Sie bereit, Ihr eigenes C++-Projekt zu erstellen und zu konfigurieren sowie die VS Code-Dokumentation zu weiteren Informationen zu seinen zahlreichen Funktionen zu durchsuchen. Dieses Tutorial lehrt Sie nicht GCC, Linux oder die C++-Sprache. Für diese Themen gibt es viele gute Ressourcen im Web.
Wenn Sie Probleme haben, können Sie gerne ein Problem für dieses Tutorial im VS Code-Dokumentationsrepository melden.
Voraussetzungen
Um dieses Tutorial erfolgreich abzuschließen, müssen Sie die folgenden Schritte ausführen
-
Installieren Sie Visual Studio Code.
-
Installieren Sie die WSL-Erweiterung.
-
Installieren Sie das Windows-Subsystem for Linux und verwenden Sie dann die Links auf derselben Seite, um Ihre bevorzugte Linux-Distribution zu installieren. Dieses Tutorial verwendet Ubuntu. Denken Sie während der Installation an Ihr Linux-Benutzerpasswort, da Sie es für die Installation zusätzlicher Software benötigen.
Richten Sie Ihre Linux-Umgebung ein
-
Öffnen Sie die Bash-Shell für WSL. Wenn Sie eine Ubuntu-Distribution installiert haben, geben Sie "Ubuntu" in das Windows-Suchfeld ein und klicken Sie dann in der Ergebnisliste darauf. Für Debian geben Sie "Debian" usw. ein.

Die Shell wird mit einer Eingabeaufforderung angezeigt, die standardmäßig aus Ihrem Benutzernamen und Computernamen besteht und Sie in Ihr Home-Verzeichnis bringt. Für Ubuntu sieht es so aus

-
Erstellen Sie ein Verzeichnis namens
projectsund darunter ein Unterverzeichnis namenshelloworldmkdir projects cd projects mkdir helloworld -
Obwohl Sie VS Code zum Bearbeiten Ihres Quellcodes verwenden, kompilieren Sie den Quellcode unter Linux mit dem g++-Compiler. Sie debuggen auch unter Linux mit GDB. Diese Tools sind unter Ubuntu nicht standardmäßig installiert, daher müssen Sie sie installieren. Glücklicherweise ist diese Aufgabe ziemlich einfach!
-
Führen Sie von der WSL-Eingabeaufforderung aus zuerst
apt-get updateaus, um die Ubuntu-Paketlisten zu aktualisieren. Eine veraltete Distribution kann manchmal Versuche zur Installation neuer Pakete beeinträchtigen.sudo apt-get updateWenn Sie möchten, können Sie
sudo apt-get update && sudo apt-get dist-upgradeausführen, um auch die neuesten Versionen der Systempakete herunterzuladen, dies kann jedoch je nach Ihrer Verbindungsgeschwindigkeit erheblich länger dauern. -
Installieren Sie von der Eingabeaufforderung die GNU-Compiler-Tools und den GDB-Debugger, indem Sie Folgendes eingeben
sudo apt-get install build-essential gdb -
Überprüfen Sie, ob die Installation erfolgreich war, indem Sie g++ und gdb lokalisieren. Wenn die Dateinamen nicht vom
whereis-Befehl zurückgegeben werden, versuchen Sie, den Update-Befehl erneut auszuführen.whereis g++ whereis gdb
Hinweis: Die Einrichtungsschritte für die Installation des g++-Compilers und des GDB-Debuggers gelten, wenn Sie direkt auf einem Linux-Computer und nicht in WSL arbeiten. Die Ausführung von VS Code in Ihrem helloworld-Projekt sowie die Schritte zum Bearbeiten, Erstellen und Debuggen sind dieselben.
VS Code in WSL ausführen
Navigieren Sie zu Ihrem helloworld-Projektordner und starten Sie VS Code vom WSL-Terminal aus mit code .
cd $HOME/projects/helloworld
code .
Sie sehen eine Meldung über "VS Code Server wird installiert". VS Code lädt einen kleinen Server unter Linux herunter und installiert ihn, mit dem dann das Desktop-VS Code kommuniziert. VS Code wird dann gestartet und der Ordner helloWorld geöffnet. Der Datei-Explorer zeigt an, dass VS Code nun im Kontext von WSL ausgeführt wird, mit der Titelleiste WSL: Ubuntu.

Sie können den Remote-Kontext auch an der Statusleiste erkennen.

Wenn Sie auf das Element der Remote-Statusleiste klicken, sehen Sie ein Dropdown-Menü mit Remote-Befehlen, die für die Sitzung relevant sind. Wenn Sie beispielsweise Ihre in WSL ausgeführte Sitzung beenden möchten, können Sie den Befehl Remote-Verbindung schließen aus dem Dropdown-Menü auswählen. Die Ausführung von code . von Ihrer WSL-Eingabeaufforderung aus startet VS Code erneut in WSL.
Der Befehl code . öffnete VS Code im aktuellen Arbeitsordner, der zu Ihrem "Arbeitsbereich" wird. Während Sie das Tutorial durchlaufen, werden Sie drei Dateien sehen, die in einem Ordner .vscode im Arbeitsbereich erstellt werden
c_cpp_properties.json(Compilerpfad- und IntelliSense-Einstellungen)tasks.json(Build-Anweisungen)launch.json(Debugger-Einstellungen)
Eine Quellcodedatei hinzufügen
Wählen Sie in der Titelleiste des Datei-Explorers die Schaltfläche Neue Datei und benennen Sie die Datei helloworld.cpp.

Installieren Sie die C/C++-Erweiterung
Sobald Sie die Datei erstellen und VS Code erkennt, dass es sich um eine C++-Datei handelt, werden Sie möglicherweise aufgefordert, die Microsoft C/C++-Erweiterung zu installieren, falls Sie diese noch nicht installiert haben.

Wählen Sie Installieren und dann Neustart erforderlich, wenn die Schaltfläche in der Erweiterungsansicht angezeigt wird, um die Installation der C/C++-Erweiterung abzuschließen.
Wenn Sie bereits lokal installierte C/C++-Sprach-Erweiterungen in VS Code haben, müssen Sie zur Erweiterungsansicht (⇧⌘X (Windows, Linux Ctrl+Shift+X)) wechseln und diese Erweiterungen in WSL installieren. Lokal installierte Erweiterungen können in WSL installiert werden, indem Sie die Schaltfläche In WSL installieren und dann Neustart erforderlich auswählen.

Fügen Sie den Hello-World-Quellcode hinzu
Fügen Sie nun diesen Quellcode ein
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main()
{
vector<string> msg {"Hello", "C++", "World", "from", "VS Code", "and the C++ extension!"};
for (const string& word : msg)
{
cout << word << " ";
}
cout << endl;
}
Drücken Sie nun ⌘S (Windows, Linux Ctrl+S), um die Datei zu speichern. Beachten Sie, wie die von Ihnen gerade hinzugefügte Datei im Datei-Explorer (⇧⌘E (Windows, Linux Ctrl+Shift+E)) in der Seitenleiste von VS Code angezeigt wird

Sie können auch Auto Save aktivieren, um Ihre Dateiänderungen automatisch zu speichern, indem Sie im Hauptmenü Datei die Option Auto Save auswählen.
Die Aktivitätsleiste ganz links ermöglicht es Ihnen, verschiedene Ansichten zu öffnen, z. B. Suchen, Quellcodeverwaltung und Ausführen. Die Ansicht Ausführen werden Sie später in diesem Tutorial behandeln. Weitere Informationen zu den anderen Ansichten finden Sie in der Dokumentation zur Benutzeroberfläche von VS Code.
IntelliSense erkunden
Hovern Sie in Ihrer neuen Datei helloworld.cpp über vector oder string, um Typinformationen zu sehen. Beginnen Sie nach der Deklaration der Variablen msg mit der Eingabe von msg., so wie Sie es beim Aufruf einer Member-Funktion tun würden. Sie sollten sofort eine Vervollständigungsliste sehen, die alle Member-Funktionen anzeigt, und ein Fenster, das die Typinformationen für das Objekt msg anzeigt

Sie können die Taste Tab drücken, um das ausgewählte Mitglied einzufügen; wenn Sie dann die öffnende Klammer hinzufügen, sehen Sie Informationen zu den Argumenten, die die Funktion benötigt.
helloworld.cpp ausführen
Denken Sie daran, dass die C++-Erweiterung den C++-Compiler verwendet, den Sie auf Ihrem Rechner installiert haben, um Ihr Programm zu erstellen. Stellen Sie sicher, dass Sie einen C++-Compiler installiert haben, bevor Sie versuchen, helloworld.cpp in VS Code auszuführen und zu debuggen.
-
Öffnen Sie
helloworld.cpp, sodass es die aktive Datei ist. -
Drücken Sie die Wiedergabetaste oben rechts im Editor.

-
Wählen Sie g++ build and debug active file aus der Liste der auf Ihrem System erkannten Compiler.

Sie werden nur beim ersten Ausführen von helloworld.cpp aufgefordert, einen Compiler auszuwählen. Dieser Compiler wird als "Standard"-Compiler in der Datei tasks.json festgelegt.
-
Nachdem der Build erfolgreich war, wird die Ausgabe Ihres Programms im integrierten Terminal angezeigt.

Wenn Sie Ihr Programm zum ersten Mal ausführen, erstellt die C++-Erweiterung tasks.json, die Sie im .vscode-Ordner Ihres Projekts finden. tasks.json speichert Build-Konfigurationen.
Ihre neue Datei tasks.json sollte der folgenden JSON-Datei ähneln:
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "C/C++: g++ build active file",
"command": "/usr/bin/g++",
"args": ["-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}"],
"options": {
"cwd": "/usr/bin"
},
"problemMatcher": ["$gcc"],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "Task generated by Debugger."
}
]
}
Hinweis: Weitere Informationen zu
tasks.json-Variablen finden Sie in der Variablenreferenz.
Die Einstellung command gibt das auszuführende Programm an; in diesem Fall g++. Das Array args gibt die Befehlszeilenargumente an, die an g++ übergeben werden. Diese Argumente müssen in der vom Compiler erwarteten Reihenfolge angegeben werden.
Diese Aufgabe weist g++ an, die aktive Datei (${file}) zu nehmen, sie zu kompilieren und eine ausführbare Datei im aktuellen Verzeichnis (${fileDirname}) mit demselben Namen wie die aktive Datei, aber ohne Erweiterung (${fileBasenameNoExtension}) zu erstellen, was für unser Beispiel helloworld ergibt.
Der Wert label ist das, was Sie in der Aufgabenliste sehen werden; Sie können diesen beliebig benennen.
Der Wert detail ist die Beschreibung der Aufgabe in der Aufgabenliste. Es wird dringend empfohlen, diesen Wert umzubenennen, um ihn von ähnlichen Aufgaben zu unterscheiden.
Von nun an liest die Wiedergabetaste aus tasks.json, um zu ermitteln, wie Ihr Programm erstellt und ausgeführt werden soll. Sie können mehrere Build-Aufgaben in tasks.json definieren, und die als Standard markierte Aufgabe wird von der Wiedergabetaste verwendet. Falls Sie den Standardcompiler ändern müssen, können Sie Tasks: Configure default build task ausführen. Alternativ können Sie die Datei tasks.json ändern und dieses Segment entfernen, indem Sie es ersetzen
"group": {
"kind": "build",
"isDefault": true
},
durch dieses:
"group": "build",
Ändern von tasks.json
Sie können Ihre tasks.json ändern, um mehrere C++-Dateien zu kompilieren, indem Sie ein Argument wie "${workspaceFolder}/*.cpp" anstelle von "${file}" verwenden. Dies kompiliert alle .cpp-Dateien in Ihrem aktuellen Ordner. Sie können auch den Ausgabedateinamen ändern, indem Sie "${fileDirname}/${fileBasenameNoExtension}" durch einen fest codierten Dateinamen ersetzen (z. B. 'helloworld.out').
helloworld.cpp debuggen
Um Ihren Code zu debuggen,
- Kehren Sie zu
helloworld.cppzurück, sodass es die aktive Datei ist. - Legen Sie einen Haltepunkt fest, indem Sie in den Rand des Editors klicken oder F9 für die aktuelle Zeile verwenden.

- Wählen Sie aus dem Dropdown-Menü neben der Wiedergabetaste Debug C/C++ File aus.

- Wählen Sie C/C++: g++ build and debug active file aus der Liste der auf Ihrem System erkannten Compiler (Sie werden nur aufgefordert, einen Compiler auszuwählen, wenn Sie
helloworld.cppzum ersten Mal ausführen oder debuggen).
Die Wiedergabetaste hat zwei Modi: C/C++-Datei ausführen und C/C++-Datei debuggen. Sie wird standardmäßig auf den zuletzt verwendeten Modus eingestellt. Wenn Sie das Debug-Symbol auf der Wiedergabetaste sehen, können Sie die Wiedergabetaste zum Debuggen auswählen, anstatt das Element im Dropdown-Menü auszuwählen.
Den Debugger erkunden
Bevor Sie mit dem schrittweisen Durchgehen des Codes beginnen, nehmen Sie sich einen Moment Zeit, um mehrere Änderungen in der Benutzeroberfläche zu bemerken:
-
Das integrierte Terminal erscheint am unteren Rand des Quellcode-Editors. Im Tab Debug Output sehen Sie eine Ausgabe, die anzeigt, dass der Debugger läuft.
-
Der Editor hebt Zeile 12 hervor, was ein Breakpoint ist, den Sie vor dem Starten des Debuggers gesetzt haben

-
Die Ansicht Run and Debug auf der linken Seite zeigt Debug-Informationen an. Ein Beispiel sehen Sie später im Tutorial.
-
Oben im Code-Editor erscheint eine Debugging-Steuerleiste. Sie können diese durch Ziehen der Punkte auf der linken Seite auf dem Bildschirm verschieben.

Wenn Sie bereits eine launch.json-Datei in Ihrem Arbeitsbereich haben, liest die Wiedergabetaste daraus, wenn sie festlegt, wie Ihre C++-Datei ausgeführt und debuggt werden soll. Wenn Sie keine launch.json haben, erstellt die Wiedergabetaste eine temporäre "Schnell-Debug"-Konfiguration auf der Fliege, wodurch die Notwendigkeit einer launch.json vollständig entfällt!
Den Code schrittweise durchgehen
Jetzt können Sie mit dem schrittweisen Durchgehen des Codes beginnen.
-
Klicken oder drücken Sie auf das Symbol Step over in der Debugging-Steuerleiste.

Dies versetzt die Programmausführung bis zur ersten Zeile der for-Schleife und überspringt alle internen Funktionsaufrufe innerhalb der Klassen
vectorundstring, die beim Erstellen und Initialisieren der Variablenmsgaufgerufen werden. Beachten Sie die Änderung im Fenster Variablen auf der Seite.
-
Drücken Sie erneut Step over, um zur nächsten Anweisung in diesem Programm zu gelangen (wobei aller interne Code übersprungen wird, der zur Initialisierung der Schleife ausgeführt wird). Jetzt zeigt das Fenster Variablen Informationen über die Schleifenvariablen an.
-
Drücken Sie erneut Schritt über, um die Anweisung
coutauszuführen. (Beachten Sie, dass die C++-Erweiterung keine Ausgabe in der Debug-Konsole ausgibt, bis die letzte cout-Anweisung ausgeführt wird.) -
Wenn Sie möchten, können Sie weiterhin Step over drücken, bis alle Wörter im Vektor auf der Konsole ausgegeben wurden. Aber wenn Sie neugierig sind, versuchen Sie, die Schaltfläche Step Into zu drücken, um den Quellcode in der C++-Standardbibliothek schrittweise durchzugehen!

Um zu Ihrem eigenen Code zurückzukehren, können Sie entweder mehrmals Step over drücken. Eine andere Möglichkeit ist, einen Haltepunkt in Ihrem Code zu setzen, indem Sie zum Tab
helloworld.cppim Code-Editor wechseln, den Einfügepunkt irgendwo in dercout-Anweisung innerhalb der Schleife platzieren und F9 drücken. Ein roter Punkt erscheint in der linken Spalte, um anzuzeigen, dass auf dieser Zeile ein Haltepunkt gesetzt wurde.
Drücken Sie dann F5, um die Ausführung ab der aktuellen Zeile in der Standardbibliotheksdatei zu starten. Die Ausführung wird bei
coutunterbrochen. Wenn Sie möchten, können Sie erneut F9 drücken, um den Haltepunkt zu deaktivieren.Wenn die Schleife abgeschlossen ist, können Sie die Ausgabe in der Registerkarte Debug-Konsole des integrierten Terminals zusammen mit einigen anderen Diagnoseinformationen sehen, die von GDB ausgegeben werden.

Eine Überwachung (Watch) einrichten
Um den Wert einer Variablen während der Ausführung Ihres Programms zu verfolgen, legen Sie eine Überwachung für die Variable fest.
-
Platzieren Sie den Einfügepunkt innerhalb der Schleife. Klicken Sie im Fenster Überwachung auf das Pluszeichen und geben Sie in das Textfeld
wordein, den Namen der Schleifenvariable. Betrachten Sie nun das Überwachungsfenster, während Sie die Schleife durchlaufen.
-
Um den Wert einer beliebigen Variablen schnell anzuzeigen, während die Ausführung bei einem Haltepunkt pausiert ist, können Sie mit der Maus darüber fahren.

Als Nächstes erstellen Sie eine tasks.json-Datei, die VS Code mitteilt, wie das Programm kompiliert werden soll. Diese Aufgabe ruft den g++-Compiler auf, um eine ausführbare Datei aus dem Quellcode zu erstellen.
Es ist wichtig, dass helloworld.cpp im Editor geöffnet ist, da der nächste Schritt die aktive Datei im Editor als Kontext verwendet, um die Build-Aufgabe im nächsten Schritt zu erstellen.
Debugging mit launch.json anpassen
Wenn Sie mit der Wiedergabetaste oder F5 debuggen, erstellt die C++-Erweiterung eine dynamische Debug-Konfiguration im Handumdrehen.
Es gibt Fälle, in denen Sie Ihre Debug-Konfiguration anpassen möchten, z. B. das Angeben von Argumenten, die zur Laufzeit an das Programm übergeben werden sollen. Sie können benutzerdefinierte Debug-Konfigurationen in einer Datei launch.json definieren.
Um launch.json zu erstellen, wählen Sie im Dropdown-Menü der Wiedergabetaste Add Debug Configuration aus.

Sie sehen dann ein Dropdown-Menü mit verschiedenen vordefinierten Debugging-Konfigurationen. Wählen Sie g++ build and debug active file.

VS Code erstellt eine Datei launch.json, die ungefähr so aussieht:
{
"version": "0.2.0",
"configurations": [
{
"name": "C/C++: g++ build and debug active file",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "/usr/bin/gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "C/C++: g++ build active file"
}
]
}
In der obigen JSON gibt program das Programm an, das Sie debuggen möchten. Hier ist es auf den Ordner der aktiven Datei ${fileDirname} und den aktiven Dateinamen ohne Erweiterung ${fileBasenameNoExtension} eingestellt, was, wenn helloworld.cpp die aktive Datei ist, helloworld ergibt. Die Eigenschaft args ist ein Array von Argumenten, die zur Laufzeit an das Programm übergeben werden.
Standardmäßig fügt die C++-Erweiterung keine Haltepunkte in Ihren Quellcode ein und der Wert stopAtEntry ist auf false gesetzt.
Ändern Sie den Wert stopAtEntry auf true, damit der Debugger bei der Methode main anhält, wenn Sie mit dem Debugging beginnen.
Von nun an lesen die Wiedergabetaste und F5 aus Ihrer Datei
launch.json, wenn Sie Ihr Programm zum Debuggen starten.
C/C++-Konfigurationen
Wenn Sie mehr Kontrolle über die C/C++-Erweiterung wünschen, können Sie eine Datei c_cpp_properties.json erstellen, mit der Sie Einstellungen wie den Pfad zum Compiler, Include-Pfade, den C++-Standard (Standard ist C++17) und mehr ändern können.
Sie können die C/C++-Konfigurationsoberfläche anzeigen, indem Sie den Befehl C/C++: Edit Configurations (UI) über die Befehlspalette (⇧⌘P (Windows, Linux Ctrl+Shift+P)) ausführen.

Dies öffnet die Seite C/C++ Configurations. Wenn Sie hier Änderungen vornehmen, schreibt VS Code diese in eine Datei namens c_cpp_properties.json im Ordner .vscode.

Sie müssen die Einstellung Include path nur dann ändern, wenn Ihr Programm Header-Dateien enthält, die sich nicht in Ihrem Arbeitsbereich oder im Standard-Bibliotheksverzeichnis befinden.
Visual Studio Code speichert diese Einstellungen in .vscode/c_cpp_properties.json. Wenn Sie diese Datei direkt öffnen, sollte sie ungefähr so aussehen:
{
"configurations": [
{
"name": "Linux",
"includePath": ["${workspaceFolder}/**"],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "clang-x64"
}
],
"version": 4
}
Schließen der WSL-Sitzung
Wenn Sie mit der Arbeit in WSL fertig sind, können Sie Ihre Remote-Sitzung mit dem Befehl Remote-Verbindung schließen schließen, der im Hauptmenü Datei und in der Befehlspalette (⇧⌘P (Windows, Linux Ctrl+Shift+P)) verfügbar ist. Dadurch wird VS Code neu gestartet und lokal ausgeführt. Sie können Ihre WSL-Sitzung einfach über die Liste Datei > Zuletzt geöffnet wieder öffnen, indem Sie Ordner mit dem Suffix [WSL] auswählen.
Nächste Schritte
- Erkunden Sie den VS Code Benutzerhandbuch.
- Überprüfen Sie die Übersicht über die C++-Erweiterung.
- Erstellen Sie einen neuen Arbeitsbereich, kopieren Sie Ihre .json-Dateien hinein, passen Sie die notwendigen Einstellungen für den neuen Arbeitsbereichspfad, den Programmnamen usw. an und beginnen Sie mit dem Coden!