Dela via


Konfigurera ett C++-projekt för IntelliSense

I vissa fall kan du behöva konfigurera C++-projektet manuellt för att intelliSense ska fungera korrekt. För MSBuild-projekt (baserat på .vcxproj filer) kan du justera inställningarna i projektegenskaper. För icke-MSBuild-projekt justerar du inställningarna i CppProperties.json filen i projektets rotkatalog. I vissa fall kan du behöva skapa en tipsfil som hjälper IntelliSense att förstå makrodefinitioner. Visual Studio IDE hjälper dig att identifiera och åtgärda IntelliSense-problem.

IntelliSense för enskild fil

När du öppnar en fil som inte ingår i ett projekt ger Visual Studio ett visst stöd för IntelliSense, men som standard visas inga felmarkeringar. Om navigeringsfältet säger Diverse filer, förklarar det förmodligen varför du inte ser felmarkeringar under felaktig kod eller varför en preprocessor-makro inte är definierad.

Kontrollera fellistan

Om en fil inte är öppen i enfilsläge och IntelliSense inte fungerar korrekt är det första stället att kontrollera fönstret Fellista . Om du vill se alla IntelliSense-fel för den aktuella källfilen tillsammans med alla inkluderade huvudfiler väljer du Build + IntelliSense i listrutan:

Skärmbild av fönstret Fellista. Build + IntelliSense har valts i listrutan filter.

IntelliSense genererar högst 1 000 fel. Om det finns fler än 1 000 fel i huvudfilerna som inkluderas av en källfil, visar källfilen bara en enda felmarkering precis i början av källfilen.

Kontrollera att #include sökvägarna är korrekta

MSBuild-projekt

Om du kör dina versioner utanför Visual Studio IDE och dina versioner lyckas, men IntelliSense är felaktigt, är det möjligt att kommandoraden inte är synkroniserad med projektinställningarna för en eller flera konfigurationer. Högerklicka på projektnoden i Solution Explorer och kontrollera att alla #include sökvägar är korrekta för den aktuella konfigurationen och plattformen. Om sökvägarna är identiska i alla konfigurationer och plattformar kan du välja Alla konfigurationer och Alla plattformar och sedan kontrollera att sökvägarna är korrekta.

Skärmbild som visar inställningen Inkludera kataloger i avsnittet Konfigurationsegenskaper.

Om du vill se aktuella värden för build-makron, till exempel VC_IncludePath, väljer du listrutan Inkludera kataloger . Välj <sedan Redigera> och välj knappen Makron .

Makefile-projekt

För Makefile-projekt som baseras på NMake-projektmallen väljer du NMake under Konfigurationsegenskaper och väljer sedan Inkludera sökväg i kategorin IntelliSense :

Skärmbild som visar inställningen Konfigurationsegenskaper > N Make > Inkludera sökväg.

CMake-projekt

För CMake-projekt kontrollerar du att #include sökvägar har angetts korrekt för alla konfigurationer i CMakeLists.txt. Andra projekttyper kan kräva en CppProperties.json fil. Mer information finns i Konfigurera kodnavigering med CppProperties.json. Kontrollera att sökvägarna är korrekta för varje konfiguration som definieras i filen.

Om det finns ett syntaxfel i CppProperties.json filen är IntelliSense i de berörda filerna felaktigt. Visual Studio visar felet i utdatafönstret.

Problem med taggparser

Taggparsern är en fuzzy C++ parser som används för surfning och navigering. Den är snabb men försöker inte helt förstå varje kodkonstruktion.

Den utvärderar till exempel inte makron för förprocessorer och kan därför felaktigt parsa kod som använder dem. När Tag Parser stöter på en obekant kodkonstruktion kan den hoppa över hela kodområdet.

Det finns två vanliga sätt på vilka det här problemet manifesteras i Visual Studio:

  1. IDE:t erbjuder sig att skapa en funktionsdefinition för en funktion som redan har definierats.

  2. Om navigeringsfältet visar ett makro innerst, har den aktuella funktionsdefinitionen hoppats över.

    Skärmbild som visar taggparsern som hoppar över funktionsdefinitionen.

    Kodfragmentet visar en makrodefinition för do_if som används i funktionen main. Taggparsern förstår inte makrot, så i stället för den navigeringslistruta som visar att namnet på den aktuella funktionen är huvudfunktionen visas namnet på makrot: do_if.

Du kan åtgärda den här typen av problem genom att lägga till en fil med namnet cpp.hint i roten i din lösningskatalog. Mer information finns i Tipsfiler.

Taggparserfel visas i fellista -fönstret.

Verifiera projektinställningar med diagnostikloggning

Om du vill kontrollera om IntelliSense-kompilatorn använder rätt kompilatoralternativ, inklusive Inkludera sökvägar och makron för förprocessor, aktiverar du Diagnostikloggning av IntelliSense-kommandorader i Verktyg > Alternativ > Textredigerare > C/C++ > Avancerad > diagnostikloggning. Ställ in Enable Logging till True, loggningsnivå till 5 (mest utförlig), och loggningsfilter till 8 (IntelliSense-loggning).

Utdatafönstret visar nu de kommandorader som skickas till IntelliSense-kompilatorn. Här är ett exempel på utdata:

[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

Den här informationen kan hjälpa dig att förstå varför IntelliSense tillhandahåller felaktig information. Om till exempel projektets Include-katalog innehåller $(MyVariable)\Includeoch diagnostikloggen visas /I\Include som en Inkludera-sökväg innebär det att den $(MyVariable) inte utvärderades och togs bort från den slutliga inkluderingssökvägen.

Om IntelliSense-builden

Visual Studio använder en dedikerad C++-kompilator för att skapa och underhålla databasen som driver alla IntelliSense-funktioner. För att hålla IntelliSense-databasen synkroniserad med koden startar Visual Studio automatiskt IntelliSense-byggversioner som bakgrundsaktiviteter som svar på specifika ändringar i projektinställningarna eller i källfilerna.

I vissa fall kanske Visual Studio dock inte uppdaterar IntelliSense-databasen i tid. När du till exempel kör ett git pull eller git checkout -kommando kan det ta upp till en timme för Visual Studio att identifiera ändringar i filerna. Du kan framtvinga en genomsökning av alla filer i en lösning genom att högerklicka på projektnoden i Solution Explorer och välja Genomsöka lösning.

Felsöka IntelliSense-byggfel

En IntelliSense-version skapar inte binärfiler, men den kan fortfarande misslyckas. En möjlig orsak till fel är anpassade .props filer eller .targets filer. I Visual Studio 2017 version 15.6 och senare loggas endast IntelliSense-byggfel i Output-fönstret. Om du vill se dem, ställ in Visa utdata från till Lösning:

Skärmbild som visar utdatafönstret. Listrutan Visa utdata från är inställd på Lösning.

Felmeddelandet kan instruera dig att aktivera designtidsspårning:

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.

Om du ställer in miljövariabeln TRACEDESIGNTIME på sant och startar om Visual Studio visas en loggfil i %TEMP% katalogen som kan hjälpa dig att diagnostisera byggfelet.

Mer information om TRACEDESIGNTIME miljövariabel finns i Roslyn och design-time-kompileringar. Informationen i dessa artiklar är relevant för C++-projekt.