Freigeben über


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 einige IntelliSense-Unterstützung, aber standardmäßig werden keine Fehlersquiggles angezeigt. Wenn in der Navigationsleiste"Verschiedene Dateien" steht, liegt das wahrscheinlich daran, dass keine Fehlerkringel unter fehlerhaftem Code angezeigt werden oder warum ein Präprozessormakro nicht definiert ist.

Ü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:

Screenshot des Fensters

IntelliSense erzeugt maximal 1.000 Fehler. Wenn mehr als 1.000 Fehler in den Headerdateien vorhanden sind, die in einer Quelldatei enthalten sind, zeigt die Quelldatei nur eine einzige Fehlerunterstreichung ganz 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.

Screenshot der Einstellung

Um die aktuellen Werte für Buildmakros wie VC_IncludePath anzuzeigen, wählen Sie das Dropdown " Verzeichnisse einschließen " aus. Wählen Sie <dann "Bearbeiten"> und dann die Schaltfläche " Makros " aus.

Makefile-Projekte

Wählen Sie für Makefile-Projekte, die auf der Projektvorlage "NMake" basieren, unter "Konfigurationseigenschaften" die Option "NMake" aus, und wählen Sie dann "Suchpfad einschließen" in der IntelliSense-Kategorie aus:

Screenshot der zeigt die Einstellung

CMake-Projekte

Stellen Sie für CMake-Projekte sicher, dass #include Pfade für alle Konfigurationen korrekt in CMakeLists.txt angegeben werden. Für andere Projekttypen ist möglicherweise eine CppProperties.json Datei erforderlich. Weitere Informationen finden Sie unter Konfigurieren der Codenavigation mit CppProperties.json. Stellen Sie sicher, dass die Pfade für jede Konfiguration korrekt sind, die in der Datei definiert ist.

Wenn in der CppProperties.json Datei 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 schnell, aber versucht nicht, jedes Codekonstrukt vollständig zu verstehen.

So werden z. B. keine Präprozessormakros ausgewertet, und daher kann sie Code falsch analysieren, der sie stark nutzt. Wenn der Tagparser auf ein unbekanntes Codekonstrukt stößt, wird dieser gesamte Codebereich möglicherweise übersprungen.

Es gibt zwei gängige Methoden, mit denen sich dieses Problem in Visual Studio manifestiert:

  1. Die IDE bietet das Erstellen einer Funktionsdefinition für eine bereits definierte Funktion.

  2. Wenn in der Navigationsleiste ein innerstes Makro angezeigt wird, wurde die aktuelle Funktionsdefinition übersprungen:

    Screenshot des Tagparsers, der die Funktionsdefinition überspringt.

    Der Codeausschnitt zeigt eine Makrodefinition für do_if, die innerhalb des Hauptteils der Funktion verwendet wird. Der Tagparser versteht das Makro nicht. Statt dass im Navigationsmenü der Name der aktuellen Funktion main angezeigt wird, wird der Name des Makros do_if angezeigt.

Um diese Arten von Problemen zu beheben, fügen Sie dem Stammverzeichnis Ihres Lösungsverzeichnisses eine Datei mit dem Namen cpp.hint 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 Einschließen von Pfaden und Präprozessormakros, aktivieren Sie die Diagnoseprotokollierung von IntelliSense-Befehlszeilen.

  1. Öffnen Sie den Bereich "Extras>Optionen ", und erweitern Sie den Abschnitt "Alle Einstellungen>sprachen>C/C++>IntelliSense>Diagnostic logging" .

  2. Aktivieren Sie das Kontrollkästchen "Diagnoseinformationen protokollieren" im Ausgabefenster .

  3. Setzen Sie die Protokollierungsebene auf 5 (am ausführlichsten).

  4. Legen Sie den Protokollierungsfilterwert auf 8 fest (IntelliSense-Protokollierung).

  1. Öffnen Sie das Dialogfeld "Extras">Optionen und erweitern Sie den Abschnitt "Text-Editor">"C/C++ Erweitert">.

  2. Legen Sie in der Gruppe "Diagnoseprotokollierung " die Option " Protokollierung aktivieren" auf "True" fest.

  3. Legen Sie den Wert der Protokollierungsebene auf 5 fest (am ausführlichsten).

  4. Legen Sie den Protokollierungsfilterwert auf 8 fest (IntelliSense-Protokollierung).

  5. Wählen Sie OK aus.

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 beispielsweise $(MyVariable)\Include enthält und im Diagnoseprotokoll /I\Include als Include-Pfad angezeigt wird, bedeutet dies, dass $(MyVariable) nicht ausgewertet wurde und aus dem endgültigen Include-Pfad 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 git pull- oder git checkout-Befehl 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.

Beheben von 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:

Screenshot des Ausgabefensters. Die Option

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 %TEMP% Verzeichnis angezeigt, die möglicherweise beim Diagnostizieren des Buildfehlers hilfreich ist.

Weitere Informationen zur TRACEDESIGNTIME Umgebungsvariable finden Sie unter Roslyn und Entwurfszeitbuilds. Die Informationen in diesen Artikeln sind für C++-Projekte relevant.