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

Häufig gestellte Fragen

Wie aktiviere ich IntelliSense korrekt?

Ohne jegliche Konfiguration versucht die Erweiterung, Header zu finden, indem sie Ihren Arbeitsbereich durchsucht und einen Compiler emuliert, den sie auf Ihrem Computer findet. (z. B. cl.exe/MinGW für Windows, gcc/clang für macOS/Linux). Wenn diese automatische Konfiguration nicht ausreicht, können Sie die Standardwerte ändern, indem Sie den Befehl C/C++: Konfigurationen bearbeiten (UI) ausführen. In dieser Ansicht können Sie den zu emulierenden Compiler, die Pfade zu den einzubindenden Dateien, Präprozessordefinitionen und mehr ändern.

Oder, wenn Sie eine Build-System-Erweiterung installieren, die mit unserer Erweiterung interagiert, können Sie dieser Erweiterung erlauben, die Konfigurationen für Sie bereitzustellen. Zum Beispiel kann die CMake Tools-Erweiterung Projekte konfigurieren, die das CMake-Build-System verwenden. Verwenden Sie den Befehl C/C++: Konfigurationsanbieter ändern..., um eine solche Erweiterung zur Bereitstellung von Konfigurationen für IntelliSense zu aktivieren.

Eine dritte Option für Projekte ohne Unterstützung für Build-System-Erweiterungen ist die Verwendung einer compile_commands.json-Datei, wenn Ihr Build-System diese Datei generieren kann. Im Abschnitt "Erweitert" der Konfigurations-UI können Sie den Pfad zu Ihrer compile_commands.json angeben, und die Erweiterung verwendet die in dieser Datei aufgeführten Kompilierungsinformationen, um IntelliSense zu konfigurieren.

Hinweis: Wenn die Erweiterung eine der #include-Direktiven in Ihrem Quellcode nicht auflösen kann, werden keine Linting-Informationen für den Hauptteil der Quelldatei angezeigt. Wenn Sie das Fenster Probleme in VS Code überprüfen, gibt die Erweiterung weitere Informationen darüber, welche Dateien sie nicht finden konnte. Wenn Sie die Linting-Informationen trotzdem anzeigen möchten, können Sie den Wert der Einstellung C_Cpp.errorSquiggles ändern.

Was ist der Unterschied zwischen includePath und browse.path?

Diese beiden Einstellungen sind in c_cpp_properties.json verfügbar und können verwirrend sein.

includePath

Diese Array von Pfadzeichenfolgen wird von der IntelliSense-Engine "Standard" verwendet, die semantikbewusste IntelliSense-Funktionen bietet. Die Include-Pfade sind dieselben Pfade, die Sie Ihrem Compiler über den -I-Schalter übergeben würden. Wenn Ihre Quelldateien geparst werden, fügt die IntelliSense-Engine diese Pfade den von Ihren #include-Direktiven angegebenen Dateien voran, um sie aufzulösen. Diese Pfade werden nicht rekursiv durchsucht, es sei denn, sie enden mit /**.

browse.path

Dieses Array von Pfadzeichenfolgen wird vom "Tag Parser" ("browse engine") verwendet, der eine Datenbank mit globalen Symbolinformationen füllt. Diese Engine zählt rekursiv alle Dateien unter den angegebenen Pfaden auf und verfolgt sie als potenzielle Includes, während sie Ihren Projektordner nach Tags durchsucht. Um die rekursive Aufzählung eines Pfads zu deaktivieren, können Sie einen /* an die Pfadzeichenfolge anhängen.

Wenn Sie zum ersten Mal einen Arbeitsbereich öffnen, fügt die Erweiterung ${workspaceFolder}/** zum includePath hinzu und browse.path wird nicht definiert (wodurch er standardmäßig auf includePath gesetzt wird). Wenn dies unerwünscht ist, können Sie Ihre Datei c_cpp_properties.json öffnen und sie ändern.

Warum sehe ich rote Wellenlinien unter Standardbibliothekstypen?

Der häufigste Grund dafür sind fehlende Include-Pfade und Defines. Der einfachste Weg, dies zu beheben, ist das Festlegen von compilerPath in c_cpp_properties.json auf den Pfad zu Ihrem Compiler.

Wie aktiviere ich das neue IntelliSense mit MinGW unter Windows?

Siehe Erste Schritte mit C++ und Mingw-w64 in Visual Studio Code.

Wie aktiviere ich das neue IntelliSense mit dem Windows-Subsystem für Linux?

Siehe Erste Schritte mit C++ und dem Windows-Subsystem für Linux in Visual Studio Code.

Warum sind meine Dateien nach dem Formatieren beschädigt?

Dateien können beschädigt werden (und andere Funktionen können fehlschlagen), wenn ein Arbeitsbereichsordner über einen Pfad mit Symlinks geöffnet wird (Problem vscode-cpptools#5061). Die Problemumgehung besteht darin, den Arbeitsbereichsordner über einen Pfad zu öffnen, bei dem die Symlinks zu ihrem Ziel aufgelöst werden.

Wie erstelle ich die IntelliSense-Datenbank neu?

Ab Version 0.12.3 der Erweiterung gibt es einen Befehl zum Zurücksetzen Ihrer IntelliSense-Datenbank. Öffnen Sie die Befehlspalette (⇧⌘P (Windows, Linux Ctrl+Shift+P)) und wählen Sie den Befehl C/C++: IntelliSense-Datenbank zurücksetzen.

Was ist der ipch-Ordner?

Der Sprachserver speichert Informationen über eingebundene Header-Dateien zwischen, um die Leistung von IntelliSense zu verbessern. Wenn Sie C/C++-Dateien in Ihrem Arbeitsbereich bearbeiten, speichert der Sprachserver Cache-Dateien im Ordner ipch. Standardmäßig wird der ipch-Ordner im Benutzerverzeichnis gespeichert. Genauer gesagt, er wird unter %LocalAppData%/Microsoft/vscode-cpptools unter Windows, $XDG_CACHE_HOME/vscode-cpptools/ unter Linux (oder $HOME/.cache/vscode-cpptools/, wenn XDG_CACHE_HOME nicht definiert ist) und $HOME/Library/Caches/vscode-cpptools/ unter macOS gespeichert. Durch die Verwendung des Benutzerverzeichnisses als Standardpfad wird pro Benutzer ein Cache-Speicherort für die Erweiterung erstellt. Da die Cache-Größenbeschränkung für einen Cache-Speicherort gilt, begrenzt die Verwendung eines Cache-Speicherorts pro Benutzer die Festplattenausnutzung des Caches auf diesen einen Ordner für alle, die den Standardwert verwenden.

VS Code-spezifische Speicherordner wurden nicht verwendet, da der von VS Code bereitgestellte Speicherort nicht gut bekannt ist und wir keine GB-Dateien schreiben wollten, wo Benutzer sie möglicherweise nicht sehen oder finden können.

Unter diesem Gesichtspunkt wussten wir, dass wir nicht den Bedürfnissen jeder einzelnen Entwicklungsumgebung gerecht werden konnten, daher stellten wir Einstellungen zur Verfügung, die es Ihnen ermöglichen, die Art und Weise anzupassen, wie dies für Ihre Situation am besten funktioniert.

"C_Cpp.intelliSenseCachePath": <string>

Diese Einstellung ermöglicht es Ihnen, Arbeitsbereichs- oder globale Überschreibungen für den Cache-Pfad festzulegen. Wenn Sie beispielsweise einen einzigen Cache-Speicherort für alle Arbeitsbereichsordner freigeben möchten, öffnen Sie die VS Code-Einstellungen und fügen Sie eine Benutzereinstellung für IntelliSense-Cache-Pfad hinzu.

"C_Cpp.intelliSenseCacheSize": <number>

Diese Einstellung ermöglicht es Ihnen, die Menge des von der Erweiterung durchgeführten Caching zu begrenzen. Dies ist eine Annäherung, aber die Erweiterung wird sich bemühen, die Cache-Größe so nah wie möglich an das von Ihnen festgelegte Limit zu halten. Wenn Sie den Cache-Speicherort zwischen Arbeitsbereichen wie oben erklärt freigeben, können Sie das Limit immer noch erhöhen/verringern, aber Sie sollten sicherstellen, dass Sie eine Benutzereinstellung für die IntelliSense-Cache-Größe hinzufügen.

Wie deaktiviere ich den IntelliSense-Cache (ipch)?

Wenn Sie die IntelliSense-Caching-Funktion nicht nutzen möchten (z. B. um einen Fehler zu umgehen, der möglicherweise nur auftritt, wenn der Cache aktiviert ist), können Sie die Funktion deaktivieren, indem Sie die Einstellung IntelliSense Cache Size auf 0 setzen (oder "C_Cpp.intelliSenseCacheSize": 0" im JSON-Einstellungen-Editor). Das Deaktivieren des Caches kann auch vorteilhaft sein, wenn Sie übermäßige Festplattenaktivität feststellen, insbesondere beim Bearbeiten von Headern.

Wie richte ich das Debugging ein?

Der Debugger muss konfiguriert werden, um zu wissen, welche ausführbare Datei und welcher Debugger verwendet werden soll

Wählen Sie im Hauptmenü Ausführen > Konfiguration hinzufügen....

Die Datei launch.json wird nun zur Bearbeitung mit einer neuen Konfiguration geöffnet. Die Standardeinstellungen funktionieren *wahrscheinlich* außer, dass Sie die Einstellung program angeben müssen.

Siehe C/C++-Debugging konfigurieren für eine eingehendere Dokumentation zur Konfiguration des Debuggers.

Wie aktiviere ich Debug-Symbole?

Das Aktivieren von Debug-Symbolen hängt vom Typ des von Ihnen verwendeten Compilers ab. Nachfolgend sind einige Compiler und die für die Aktivierung von Debug-Symbolen erforderlichen Compiler-Optionen aufgeführt.

Im Zweifelsfall überprüfen Sie die Dokumentation Ihres Compilers auf die erforderlichen Optionen, um Debug-Symbole in der Ausgabe einzuschließen. Dies kann eine Variante von -g oder --debug sein.

Clang (C++)

  • Wenn Sie den Compiler manuell aufrufen, fügen Sie die Option --debug hinzu.
  • Wenn Sie ein Skript verwenden, stellen Sie sicher, dass die Umgebungsvariable CXXFLAGS gesetzt ist. Zum Beispiel: export CXXFLAGS="${CXXFLAGS} --debug".
  • Wenn Sie CMake verwenden, stellen Sie sicher, dass CMAKE_CXX_FLAGS gesetzt ist. Zum Beispiel: export CMAKE_CXX_FLAGS=${CXXFLAGS}.

Clang (C)

Siehe Clang C++, aber verwenden Sie CFLAGS anstelle von CXXFLAGS.

gcc oder g++

Wenn Sie den Compiler manuell aufrufen, fügen Sie die Option -g hinzu.

cl.exe

Symbole befinden sich in der *.pdb-Datei.

Warum funktioniert das Debugging nicht?

Meine Breakpoints werden nicht erreicht

Wenn Sie mit dem Debugging beginnen und Ihre Breakpoints nicht gebunden sind (solider roter Kreis) oder nicht erreicht werden, müssen Sie möglicherweise während der Kompilierung Debug-Symbole aktivieren.

Das Debugging startet, aber alle Zeilen in meiner Stack-Trace sind grau

Wenn Ihr Debugger eine graue Stack-Trace anzeigt, nicht an einem Breakpoint stoppt oder die Symbole im Call-Stack grau sind, dann wurde Ihre ausführbare Datei ohne Debug-Symbole kompiliert.

Was tun, wenn ich ein Problem mit der C/C++-Erweiterung vermute?

Wenn Sie weitere Fragen haben, starten Sie eine Diskussion auf GitHub Discussions oder wenn Sie ein Problem finden, das behoben werden muss, eröffnen Sie ein Issue auf GitHub Issues.

Wenn Sie ein Problem mit der Erweiterung haben, das wir anhand der Informationen in Ihrem Issue-Bericht nicht diagnostizieren können, bitten wir Sie möglicherweise, die Debug-Protokollierung zu aktivieren und uns Ihre Protokolle zukommen zu lassen. Siehe C/C++-Erweiterungsprotokollierung, wie Sie C/C++-Erweiterungsprotokolle erhalten.

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