Een C++-project configureren voor IntelliSense
In sommige gevallen moet u uw C++-project mogelijk handmatig configureren om IntelliSense goed te laten werken. Voor MSBuild-projecten (op basis van .vcxproj bestanden) kunt u instellingen in projecteigenschappen aanpassen. Voor niet-MSBuild-projecten past u instellingen aan in het CppProperties.json-bestand in de hoofdmap van het project. In sommige gevallen moet u mogelijk een hintbestand maken om IntelliSense inzicht te geven in macrodefinities. De Visual Studio IDE helpt u bij het identificeren en oplossen van IntelliSense-problemen.
IntelliSense met één bestand
Wanneer u een bestand opent dat niet is opgenomen in een project, biedt Visual Studio enige IntelliSense-ondersteuning, maar standaard worden er geen foutmarkeringen weergegeven. Als de navigatiebalkoverige bestandenaangeeft, verklaart dat waarschijnlijk waarom u geen foutaanduidingen ziet onder onjuiste code of waarom een preprocessormacro niet wordt gedefinieerd.
De lijst met fouten controleren
Als een bestand niet is geopend in de modus voor één bestand en IntelliSense niet goed werkt, controleert u eerst het venster Foutenlijst. Als u alle IntelliSense-fouten voor het huidige bronbestand samen met alle opgenomen headerbestanden wilt zien, kiest u Build + IntelliSense- in de vervolgkeuzelijst:
IntelliSense produceert maximaal 1000 fouten. Als er meer dan 1000 fouten zijn in de headerbestanden die in een bronbestand zijn opgenomen, wordt er aan het begin van dit bronbestand slechts een enkele foutkrabbel weergegeven.
Zorg ervoor dat #include paden juist zijn
MSBuild-projecten
Als u uw builds uitvoert buiten de Visual Studio IDE en uw builds slagen, maar IntelliSense niet correct is, is het mogelijk dat uw opdrachtregel niet is gesynchroniseerd met de projectinstellingen voor een of meer configuraties. Klik met de rechtermuisknop op het projectknooppunt in Solution Explorer en zorg ervoor dat alle #include paden juist zijn voor de huidige configuratie en het huidige platform. Als de paden identiek zijn in alle configuraties en platforms, kunt u Alle configuraties en Alle platforms selecteren en vervolgens controleren of de paden juist zijn.
Als u de huidige waarden voor het maken van macro's zoals VC_IncludePathwilt zien, selecteert u de regel Mappen opnemen en klikt u op de vervolgkeuzelijst aan de rechterkant. Kies vervolgens <Bewerken> en klik op de knop Macro's.
Makefile-projecten
Voor Makefile-projecten die zijn gebaseerd op de NMake-projectsjabloon, kiest u NMake- in het linkerdeelvenster en kiest u vervolgens Zoekpad opnemen onder de categorie IntelliSense-:
Mapprojecten openen
Voor CMake-projecten moet u ervoor zorgen dat #include paden correct zijn opgegeven voor alle configuraties in CMakeLists.txt. Voor andere projecttypen is mogelijk een CppProperties.json-bestand vereist. Zie IntelliSense configureren met CppProperties.jsonvoor meer informatie. Zorg ervoor dat de paden juist zijn voor elke configuratie die in het bestand is gedefinieerd.
Als het CppProperties.json-bestand een syntaxisfout bevat, is IntelliSense in de betrokken bestanden onjuist. Visual Studio geeft de fout weer in het uitvoervenster.
Problemen met tag parser
De tagparser is een 'fuzzy' C++-parser die wordt gebruikt voor browsen en navigatie. Het is zeer snel, maar probeert niet alle codeconstructies volledig te begrijpen.
Het evalueert bijvoorbeeld geen preprocessormacro's en kan daarom code die intensief wordt gebruikt, onjuist parseren. Wanneer de Tag Parser een onbekende codeconstructie tegenkomt, kan deze het hele codegebied overslaan.
Er zijn twee veelvoorkomende manieren waarop dit probleem zich voordoet in Visual Studio:
Als op de navigatiebalk een binnenste macro wordt weergegeven, is de huidige functiedefinitie overgeslagen:
De IDE biedt aan om een functiedefinitie te maken voor een functie die al is gedefinieerd:
te definiëren
Als u dit soort problemen wilt oplossen, voegt u een bestand met de naam cpp.hint toe aan de hoofdmap van uw oplossingsmap. Zie Hint Filesvoor meer informatie.
Tagparserfouten worden weergegeven in het venster Foutenlijst.
Projectinstellingen valideren met diagnostische logboekregistratie
Als u wilt controleren of de IntelliSense-compiler de juiste compileropties gebruikt, inclusief Includepaden en preprocessormacro's, schakelt u Diagnostische logboekregistratie van IntelliSense-opdrachtregels in via Extra > Opties > Teksteditor > C/C++ > Geavanceerd > Diagnostische logboekregistratie. Stel Logboekregistratie inschakelen in op Waar, Logboekniveau op 5 (meest uitgebreid) en Logboekregistratiefilter op 8 (IntelliSense-logboekregistratie).
In het uitvoervenster worden nu de opdrachtregels weergegeven die worden doorgegeven aan de IntelliSense-compiler. Hier volgt een voorbeelduitvoer:
[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
Deze informatie kan u helpen begrijpen waarom IntelliSense onjuiste informatie levert. Als de map Include van uw project bijvoorbeeld $(MyVariable)\Includebevat en in het diagnostische logboek /I\Include als een include-pad wordt weergegeven, betekent dit dat $(MyVariable) niet is geëvalueerd en is verwijderd uit het uiteindelijke include-pad.
Over de IntelliSense-build
Visual Studio maakt gebruik van een toegewezen C++-compiler om de database te maken en onderhouden die alle IntelliSense-functies mogelijk maakt. Als u de IntelliSense-database synchroon wilt houden met de code, start Visual Studio automatisch IntelliSense-builds als achtergrondtaken als reactie op bepaalde wijzigingen die zijn aangebracht in de projectinstellingen of bronbestanden.
In sommige gevallen werkt Visual Studio de IntelliSense-database echter mogelijk niet tijdig bij. Wanneer u bijvoorbeeld het commando git pull of git checkout uitvoert, kan het tot een uur duren voordat Visual Studio wijzigingen in de bestanden detecteert. U kunt een nieuwe scan van alle bestanden in een oplossing afdwingen door met de rechtermuisknop op het projectknooppunt in Solution Explorer- te klikken en Oplossing opnieuw scannente kiezen.
Problemen met IntelliSense-buildfouten oplossen
Een IntelliSense-build produceert geen binaire bestanden, maar kan nog steeds mislukken. Een mogelijke oorzaak voor fouten is aangepaste .props- of .targets-bestanden. In Visual Studio 2017 versie 15.6 en hoger worden uitsluitend IntelliSense-buildfouten vastgelegd in het uitvoervenster. Als u deze wilt zien, stelt u Uitvoer van in op Solution:
Het foutbericht kan u instrueren om ontwerptijdtracering in te schakelen:
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.
Als u de omgevingsvariabele TRACEDESIGNTIME instelt op true en Visual Studio opnieuw start, ziet u een logboekbestand in de map %TEMP%, wat kan helpen bij het vaststellen van de buildfout.
Zie Roslyn en Common Project Systemvoor meer informatie over de omgevingsvariabele TRACEDESIGNTIME. De informatie in deze artikelen is relevant voor C++-projecten.