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:
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.
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:
Ö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:
Om navigeringsfältet visar ett makro längst in i det inre hoppades den aktuella funktionsdefinitionen över:
IDE erbjuder sig att skapa en funktionsdefinition för en funktion som redan har definierats:
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:
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.