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 den 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 med en fil

När du öppnar en fil som inte ingår i ett projekt ger Visual Studio viss IntelliSense-stöd, men som standard visas inga felmarkeringar. Om navigeringsfältet säger Diverse filerkan det förmodligen förklara varför du inte ser felmarkeringar under felaktig kod eller varför en preprocessormakro inte har definierats.

Kontrollera fellistan

Om en fil inte är öppen i enfilsläge och IntelliSense inte fungerar korrekt bör du först 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:

VC++ IntelliSense i felsökningslista

IntelliSense genererar högst 1 000 fel. Om det finns över 1 000 fel i huvudfilerna som inkluderas av en källfil, visar källfilen bara en enda felmarkering allra först i 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.

VC++ Inkludera kataloger

Om du vill se aktuella värden för skapa makron, till exempel VC_IncludePath, väljer du raden Inkludera kataloger och klickar på listrutan till höger. Välj sedan <Redigera> och klicka på knappen makron.

Makefile-projekt

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

Makefile-projektet innehåller sökvägar

Öppna mappprojekt

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 IntelliSense 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 felaktiga. Visual Studio visar felet i utdatafönstret.

Problem med taggparser

Taggparsern är en "fuzzy" C++ parser som används för surfning och navigering. Det är mycket snabbt 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 mycket. 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. Om navigeringsfältet visar ett makro längst in i det inre hoppades den aktuella funktionsdefinitionen över:

    Tag parser hoppar över funktionsdefinitionen

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

    Tag parser erbjuder sig att definiera befintliga funktioner

Du kan åtgärda den här typen av problem genom att lägga till en fil med namnet cpp.hint till 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 Tools > Alternativ > Textredigeraren > C/C++ > Avancerad > Diagnostisk loggning. 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 projektets include-katalog till exempel innehåller $(MyVariable)\Includeoch diagnostikloggen visar /I\Include as an Include path (Inkludera sökväg) innebär det att $(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-utcheckningskommando 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- eller .targets-filer. I Visual Studio 2017 version 15.6 och senare loggas IntelliSense-endast byggfel i utdatafönstret. Om du vill se dem, ställ in Visa utdata från till Lösning:

utmatningsfönster för lösningsfel

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å true och startar om Visual Studio visas en loggfil i katalogen %TEMP% som kan hjälpa dig att diagnostisera byggfelet.

Mer information om miljövariabeln TRACEDESIGNTIME finns i Roslyn och Common Project System. Informationen i dessa artiklar är relevant för C++-projekt.