Häufig gestellte Fragen
- Wie bringe ich IntelliSense dazu, korrekt zu funktionieren?
- Was ist der Unterschied zwischen includePath und browse.path in der c_cpp_properties.json?
- Warum sehe ich rote Wellenlinien unter Typen der Standardbibliothek?
- Wie bringe ich das neue IntelliSense dazu, mit MinGW unter Windows zu funktionieren?
- Wie bringe ich das neue IntelliSense dazu, mit dem Windows-Subsystem für Linux zu funktionieren?
- Warum sind meine Dateien nach der Formatierung beschädigt?
- Wie erstelle ich die IntelliSense-Datenbank neu?
- Was ist der ipch-Ordner?
- Wie deaktiviere ich den IntelliSense-Cache (ipch)?
- Wie richte ich das Debugging ein?
- Wie aktiviere ich Debug-Symbole?
- Warum funktioniert das Debugging nicht?
- Was mache ich, wenn ich ein Problem mit der C/C++-Erweiterung vermute?
Wie bringe ich IntelliSense dazu, korrekt zu funktionieren?
Ohne jegliche Konfiguration versucht die Erweiterung, Header-Dateien durch Durchsuchen Ihres Arbeitsbereichsordners und durch Emulieren eines auf Ihrem Computer gefundenen Compilers zu lokalisieren (z. B. cl.exe/MinGW für Windows, gcc/clang für macOS/Linux). Wenn diese automatische Konfiguration nicht ausreicht, können Sie die Standardeinstellungen ä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 zu verwendenden Include-Dateien, Präprozessor-Definitionen und mehr ändern.
Oder, falls Sie eine Build-System-Erweiterung installieren, die mit unserer Erweiterung kommuniziert, können Sie dieser Erweiterung erlauben, die Konfigurationen für Sie bereitzustellen. Beispielsweise kann die CMake Tools-Erweiterung Projekte konfigurieren, die das CMake-Build-System verwenden. Verwenden Sie den Befehl C/C++: Konfigurationsanbieter ändern..., um einer solchen Erweiterung zu ermöglichen, die Konfigurationen für IntelliSense bereitzustellen.
Eine dritte Option für Projekte ohne Unterstützung für Build-System-Erweiterungen ist die Verwendung einer compile_commands.json-Datei, sofern Ihr Build-System das Erstellen dieser Datei unterstützt. Im Abschnitt "Erweitert" der Konfigurations-UI können Sie den Pfad zu Ihrer compile_commands.json angeben, und die Erweiterung verwendet die darin aufgeführten Kompilierungsinformationen, um IntelliSense zu konfigurieren.
Hinweis: Wenn die Erweiterung eine der #include-Direktiven in Ihrem Quellcode nicht auflösen kann, zeigt sie keine Linting-Informationen für den Hauptteil der Quelldatei an. Wenn Sie das Fenster Probleme in VS Code überprüfen, stellt die Erweiterung weitere Informationen darüber bereit, welche Dateien sie nicht finden konnte. Wenn Sie die Linting-Informationen dennoch 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
Dieses Array von Pfad-Strings wird von der "Default"-IntelliSense-Engine verwendet, die semantikbewusste IntelliSense-Funktionen bereitstellt. Die Include-Pfade sind dieselben Pfade, die Sie über den -I-Schalter an Ihren Compiler senden würden. Wenn Ihre Quelldateien analysiert werden, stellt die IntelliSense-Engine diese Pfade den Dateien voran, die in Ihren #include-Direktiven angegeben sind, während sie versucht, diese aufzulösen. Diese Pfade werden nicht rekursiv durchsucht, es sei denn, sie enden auf /**.
browse.path
Dieses Array von Pfad-Strings wird von der "Tag Parser"-Engine ("Browse-Engine") verwendet, die eine Datenbank mit globalen Symbolinformationen füllt. Diese Engine durchläuft rekursiv alle Dateien unter den angegebenen Pfaden und verfolgt sie als potenzielle Includes, während der Projektordner für Tags analysiert wird. Um die rekursive Aufzählung eines Pfades zu deaktivieren, können Sie ein /* an den Pfad-String anhängen.
Wenn Sie einen Arbeitsbereich zum ersten Mal öffnen, fügt die Erweiterung ${workspaceFolder}/** zum includePath hinzu, und der browse.path bleibt undefiniert (sodass er standardmäßig auf den includePath zurückgreift). Wenn dies nicht gewünscht ist, können Sie Ihre c_cpp_properties.json-Datei öffnen und dies ändern.
Warum sehe ich rote Wellenlinien unter Typen der Standardbibliothek?
Der häufigste Grund hierfür sind fehlende Include-Pfade und Definitionen. Der einfachste Weg, dies zu beheben, besteht darin, compilerPath in der c_cpp_properties.json auf den Pfad zu Ihrem Compiler zu setzen.
Wie bringe ich das neue IntelliSense dazu, mit MinGW unter Windows zu funktionieren?
Siehe Erste Schritte mit C++ und Mingw-w64 in Visual Studio Code.
Wie bringe ich das neue IntelliSense dazu, mit dem Windows-Subsystem für Linux zu funktionieren?
Siehe Erste Schritte mit C++ und Windows Subsystem für Linux in Visual Studio Code.
Warum sind meine Dateien nach der Formatierung beschädigt?
Dateien können beschädigt werden (und andere Funktionen können fehlschlagen), wenn ein Arbeitsbereichsordner über einen Pfad mit symbolischen Links geöffnet wird (Problem vscode-cpptools#5061). Die Umgehung besteht darin, den Arbeitsbereichsordner über einen Pfad zu öffnen, bei dem die symbolischen Links zu ihren Zielen aufgelöst wurden.
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 inkludierte Header-Dateien zwischen, um die Leistung von IntelliSense zu verbessern. Wenn Sie C/C++-Dateien in Ihrem Arbeitsbereichsordner bearbeiten, speichert der Sprachserver Cache-Dateien im ipch-Ordner. Standardmäßig wird der ipch-Ordner unter dem Benutzerverzeichnis gespeichert. Insbesondere unter %LocalAppData%/Microsoft/vscode-cpptools auf Windows, $XDG_CACHE_HOME/vscode-cpptools/ auf Linux (oder $HOME/.cache/vscode-cpptools/, falls XDG_CACHE_HOME nicht definiert ist) und $HOME/Library/Caches/vscode-cpptools/ auf macOS. Durch die Verwendung des Benutzerverzeichnisses als Standardpfad wird ein Cache-Speicherort pro Benutzer für die Erweiterung erstellt. Da das Limit für die Cache-Größe für einen Cache-Speicherort gilt, begrenzt die Verwendung eines Speicherorts pro Benutzer den Festplattenspeicherverbrauch des Caches auf diesen einen Ordner für alle Personen, die den Standardwert verwenden.
VS Code-spezifische Speicherordner pro Arbeitsbereich wurden nicht verwendet, da der von VS Code bereitgestellte Speicherort nicht allgemein bekannt ist und wir keine GB an Dateien an Orten schreiben wollten, an denen Benutzer sie möglicherweise nicht sehen oder nicht wissen, wo sie sie finden können.
Vor diesem Hintergrund wussten wir, dass wir nicht die Anforderungen jeder unterschiedlichen Entwicklungsumgebung erfüllen könnten, daher haben wir Einstellungen bereitgestellt, mit denen Sie die Funktionsweise an Ihre Situation anpassen können.
"C_Cpp.intelliSenseCachePath": <String>
Diese Einstellung ermöglicht es Ihnen, arbeitsbereichsspezifische 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 Path hinzu.
"C_Cpp.intelliSenseCacheSize": <Nummer>
Diese Einstellung ermöglicht es Ihnen, ein Limit für die Größe des Caches festzulegen, den die Erweiterung verwendet. Dies ist ein Näherungswert, aber die Erweiterung wird ihr Bestes tun, um die Cache-Größe so nah wie möglich an dem von Ihnen festgelegten Limit zu halten. Wenn Sie den Cache-Speicherort wie oben erläutert über Arbeitsbereiche hinweg teilen, können Sie das Limit dennoch erhöhen/verringern, sollten aber sicherstellen, dass Sie eine Benutzereinstellung für IntelliSense Cache Size hinzufügen.
Wie deaktiviere ich den IntelliSense-Cache (ipch)?
Wenn Sie die IntelliSense-Caching-Funktion nicht verwenden 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-Einstellungseditor). Das Deaktivieren des Caches kann auch vorteilhaft sein, wenn Sie übermäßige Festplattenschreibvorgänge 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 sollen.
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 program-Einstellung angeben müssen.
Siehe C/C++-Debugging konfigurieren für eine tiefergehende Dokumentation zur Konfiguration des Debuggers.
Wie aktiviere ich Debug-Symbole?
Das Aktivieren von Debug-Symbolen hängt von der Art des verwendeten Compilers ab. Im Folgenden finden Sie einige der Compiler und die erforderlichen Compiler-Optionen zum Aktivieren von Debug-Symbolen.
Im Zweifelsfall überprüfen Sie bitte die Dokumentation Ihres Compilers auf die Optionen, die erforderlich sind, um Debug-Symbole in die Ausgabe aufzunehmen. Dies kann eine Variante von -g oder --debug sein.
Clang (C++)
- Wenn Sie den Compiler manuell aufrufen, fügen Sie die Option
--debughinzu. - Wenn Sie ein Skript verwenden, stellen Sie sicher, dass die Umgebungsvariable
CXXFLAGSgesetzt ist. Zum Beispielexport CXXFLAGS="${CXXFLAGS} --debug". - Wenn Sie CMake verwenden, stellen Sie sicher, dass
CMAKE_CXX_FLAGSgesetzt ist. Zum Beispielexport CMAKE_CXX_FLAGS=${CXXFLAGS}.
Clang (C)
Siehe Clang C++, verwenden Sie jedoch 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 Debuggen beginnen und Ihre Breakpoints nicht gebunden sind (durchgezogener roter Kreis) oder nicht erreicht werden, müssen Sie möglicherweise Debug-Symbole während der Kompilierung aktivieren.
Das Debugging startet, aber alle Zeilen in meinem Stack-Trace sind grau
Wenn Ihr Debugger einen grauen Stack-Trace anzeigt, nicht an einem Breakpoint anhält oder die Symbole im Aufrufstapel grau sind, wurde Ihre ausführbare Datei ohne Debug-Symbole kompiliert.
Was mache ich, wenn ich ein Problem mit der C/C++-Erweiterung vermute?
Wenn Sie weitere Fragen haben, starten Sie bitte eine Diskussion unter GitHub-Diskussionen, oder wenn Sie ein Problem finden, das behoben werden muss, erstellen Sie ein Issue unter 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 zu senden. Siehe C/C++-Erweiterungsprotokollierung, um zu erfahren, wie Sie C/C++-Erweiterungsprotokolle erhalten.