Konfigurieren eines C++-Projekts für IntelliSense
In einigen Fällen müssen Sie möglicherweise Ihr C++-Projekt manuell konfigurieren, damit IntelliSense ordnungsgemäß funktioniert. Für MSBuild-Projekte (basierend auf .vcxproj Dateien) können Sie Einstellungen in Projekteigenschaften anpassen. Bei Nicht-MSBuild-Projekten passen Sie einstellungen in der CppProperties.json Datei im Stammverzeichnis des Projekts an. In einigen Fällen müssen Sie möglicherweise eine Hinweisdatei erstellen, damit IntelliSense Makrodefinitionen verstehen kann. Die Visual Studio-IDE hilft Ihnen beim Identifizieren und Beheben von IntelliSense-Problemen.
IntelliSense mit Einzeldatei
Wenn Sie eine Datei öffnen, die nicht in einem Projekt enthalten ist, bietet Visual Studio eine gewisse IntelliSense-Unterstützung, aber standardmäßig werden keine Fehlerwellenlinien angezeigt. Wenn auf der Navigationsleiste die Angabe Sonstige Dateien angezeigt wird, dann erklärt das wahrscheinlich, warum Sie keine Fehlerwellenlinien unter fehlerhaftem Code sehen oder kein Präprozessormakro definiert wird.
Überprüfen der Fehlerliste
Wenn eine Datei nicht im Einzeldateimodus geöffnet ist und IntelliSense nicht ordnungsgemäß funktioniert, ist die erste Zu überprüfende Stelle das Fenster "Fehlerliste". Um alle IntelliSense-Fehler für die aktuelle Quelldatei zusammen mit allen enthaltenen Headerdateien anzuzeigen, wählen Sie Build + IntelliSense in der Dropdownliste aus:
IntelliSense erzeugt maximal 1000 Fehler. Bei über 1.000 Fehler in den Headerdateien einer Quelldatei zeigt die Quelldatei lediglich eine einzige Wellenlinie für Fehler am Anfang der Quelldatei an.
Sicherstellen, dass #include Pfade korrekt sind
MSBuild-Projekte
Wenn Sie Ihre Builds außerhalb der Visual Studio-IDE ausführen und Ihre Builds erfolgreich sind, IntelliSense jedoch falsch ist, ist es möglich, dass die Befehlszeile nicht mehr mit den Projekteinstellungen für eine oder mehrere Konfigurationen synchronisiert ist. Klicken Sie mit der rechten Maustaste auf den Projektknoten im Projektmappen-Explorer, und stellen Sie sicher, dass alle #include Pfade für die aktuelle Konfiguration und Plattform korrekt sind. Wenn die Pfade in allen Konfigurationen und Plattformen identisch sind, können Sie Alle Konfigurationen und Alle Plattformen auswählen und dann überprüfen, ob die Pfade korrekt sind.
Um die aktuellen Werte für Buildmakros wie VC_IncludePathanzuzeigen, wählen Sie die Zeile "Verzeichnisse einschließen" aus, und klicken Sie auf die Dropdownliste auf der rechten Seite. Wählen Sie dann <Bearbeiten> aus, und klicken Sie auf die Schaltfläche Makros.
Makefile-Projekte
Wählen Sie für Makefile-Projekte, die auf der NMake-Projektvorlage basieren, im linken Bereich NMake aus, und wählen Sie dann Suchpfad einschließen unter der Kategorie IntelliSense aus:
Projekte im Ordner öffnen
Stellen Sie für CMake-Projekte sicher, dass #include Pfade für alle Konfigurationen in CMakeLists.txtkorrekt angegeben werden. Für andere Projekttypen ist möglicherweise eine CppProperties.json Datei erforderlich. Weitere Informationen finden Sie unter IntelliSense mit CppProperties.jsonkonfigurieren. Stellen Sie sicher, dass die Pfade für jede Konfiguration korrekt sind, die in der Datei definiert ist.
Wenn in der datei CppProperties.json ein Syntaxfehler auftritt, ist IntelliSense in den betroffenen Dateien falsch. Visual Studio zeigt den Fehler im Ausgabefenster an.
Tagparserprobleme
Der Tagparser ist ein "Fuzzy"-C++-Parser, der zum Durchsuchen und Navigieren verwendet wird. Es ist sehr schnell, aber versucht nicht, jedes Codekonstrukt vollständig zu verstehen.
So werden z. B. keine Präprozessormakros ausgewertet, und daher kann sie code fälschlicherweise analysieren, der sie stark nutzt. Wenn der Tagparser auf ein unbekanntes Codekonstrukt stößt, kann er diesen gesamten Codebereich überspringen.
Es gibt zwei gängige Methoden, mit denen sich dieses Problem in Visual Studio manifestiert:
Wenn in der Navigationsleiste ein innerstes Makro angezeigt wird, wurde die aktuelle Funktionsdefinition übersprungen:
Die IDE bietet die Erstellung einer Funktionsdefinition für eine bereits definierte Funktion:
Um diese Arten von Problemen zu beheben, fügen Sie eine Datei mit dem Namen "cpp.hint" zum Stammverzeichnis Ihres Lösungsverzeichnisses hinzu. Weitere Informationen finden Sie unter Hint Files.
Tagparserfehler werden im Fenster Fehlerliste angezeigt.
Überprüfen von Projekteinstellungen mit Diagnoseprotokollierung
Um zu überprüfen, ob der IntelliSense-Compiler korrekte Compileroptionen verwendet, einschließlich Include-Pfade und Präprozessormakros, aktivieren Sie die Diagnoseprotokollierung von IntelliSense-Befehlszeilen unter Tools > Optionen > Text-Editor > C/C++ > Erweitert > Diagnostic Logging. Legen Sie Protokollierung aktivieren auf TRUE, den Protokolliergrad auf 5 (ausführlichste Protokollierung) und den Protokollierungsfilter auf 8 (IntelliSense-Protokollierung) fest.
Im Ausgabefenster werden nun die Befehlszeilen angezeigt, die an den IntelliSense-Compiler übergeben werden. Hier ist eine Beispielausgabe:
[IntelliSense] Configuration Name: Debug|Win32
[IntelliSense] Toolset IntelliSense Identifier:
[IntelliSense] command line options:
/c
/I.
/IC:\Repo\Includes
/DWIN32
/DDEBUG
/D_DEBUG
/Zc:wchar_t-
/Zc:forScope
/Yustdafx.h
Diese Informationen helfen Ihnen möglicherweise zu verstehen, warum IntelliSense ungenaue Informationen bereitstellt. Wenn das Include-Verzeichnis Ihres Projekts z. B. $(MyVariable)\Includeenthält und das Diagnoseprotokoll /I\Include als Includepfad anzeigt, bedeutet dies, dass $(MyVariable) nicht ausgewertet wurde und aus dem endgültigen Includepfad entfernt wurde.
Informationen zum IntelliSense-Build
Visual Studio verwendet einen dedizierten C++-Compiler, um die Datenbank zu erstellen und zu verwalten, die alle IntelliSense-Features unterstützt. Damit die IntelliSense-Datenbank mit dem Code synchronisiert wird, startet Visual Studio automatisch IntelliSense-Builds als Hintergrundaufgaben als Reaktion auf bestimmte Änderungen in den Projekteinstellungen oder Quelldateien.
In einigen Fällen aktualisiert Visual Studio die IntelliSense-Datenbank jedoch möglicherweise nicht rechtzeitig. Wenn Sie beispielsweise einen Befehl git pull oder git checkout ausführen, kann es bis zu einer Stunde dauern, bis Visual Studio Änderungen in den Dateien erkennt. Sie können eine erneute Überprüfung aller Dateien in einer Projektmappe erzwingen, indem Sie mit der rechten Maustaste auf den Projektknoten im Projektmappen-Explorer klicken und dann Projektmappe neu prüfen auswählen.
Problembehandlung bei IntelliSense-Buildfehlern
Ein IntelliSense-Build erzeugt keine Binärdateien, kann aber trotzdem fehlschlagen. Eine mögliche Ursache für fehler ist benutzerdefinierte .props- oder .targets-Dateien. In Visual Studio 2017, Version 15.6 und höher werden reine IntelliSense-Buildfehler im Ausgabefenster protokolliert. Legen sie zum Anzeigen dieser Fehler Ausgabe anzeigen von auf Projektmappe fest:
Die Fehlermeldung weist Sie ggf. an, die Ablaufverfolgung zur Entwurfszeit zu aktivieren:
error: Designtime build failed for project 'E:\src\MyProject\MyProject.vcxproj',
configuration 'Debug|x64'. IntelliSense might be unavailable.
Set environment variable TRACEDESIGNTIME=true and restart
Visual Studio to investigate.
Wenn Sie die Umgebungsvariable TRACEDESIGNTIME auf "true" festlegen und Visual Studio neu starten, wird eine Protokolldatei im verzeichnis %TEMP% angezeigt, die möglicherweise beim Diagnostizieren des Buildfehlers hilfreich ist.
Weitere Informationen zur TRACEDESIGNTIME-Umgebungsvariablen finden Sie unter Roslyn und Common Project System. Die Informationen in diesen Artikeln sind für C++-Projekte relevant.