Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In sommige gevallen moet u uw C++-project mogelijk handmatig configureren om IntelliSense goed te laten werken. Voor MSBuild-projecten (op .vcxproj basis van bestanden) kunt u instellingen in projecteigenschappen aanpassen. Voor niet-MSBuild-projecten past u de instellingen in het CppProperties.json bestand aan 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 voor één bestand
Wanneer u een bestand opent dat niet is opgenomen in een project, biedt Visual Studio enkele IntelliSense-ondersteuning, maar standaard worden er geen foutquiggles weergegeven. Als navigatiebalkdiverse bestanden staat, verklaart dat waarschijnlijk waarom u geen foutmarkeringen onder de onjuiste code ziet 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 door een bronbestand zijn opgenomen, wordt in het bronbestand slechts één foutquiggle aan het begin van het bronbestand weergegeven.
Zorg ervoor dat #include paden juist zijn
MSBuild-projecten
Als u uw builds uitvoert buiten de Visual Studio IDE en uw builds slaagt, maar IntelliSense onjuist 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_IncludePath wilt zien, selecteert u de vervolgkeuzelijst Mappen opnemen . Kies vervolgens <Bewerken> en selecteer de knop Macro's.
Makefile-projecten
Voor Makefile-projecten die zijn gebaseerd op de NMake-projectsjabloon, kiest u NMake onder Configuratie-eigenschappen en kiest u vervolgens Zoekpad opnemen in de Categorie IntelliSense :
CMake-projecten
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 Codenavigatie configureren met CppProperties.jsonvoor meer informatie. Zorg ervoor dat de paden juist zijn voor elke configuratie die in het bestand is gedefinieerd.
Als het bestand een syntaxisfout CppProperties.json 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 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 het dat hele codegebied overslaan.
Er zijn twee veelvoorkomende manieren waarop dit probleem zich voordoet in Visual Studio:
De IDE biedt aan om een functiedefinitie te maken voor een functie die al is gedefinieerd.
Als op de navigatiebalk een binnenste macro wordt weergegeven, is de huidige functiedefinitie overgeslagen:
Het codefragment toont een macrodefinitie voor do_if die wordt gebruikt in de hoofdfunctie van de functie. De tagparser begrijpt de macro niet, dus in plaats van de navigatievervolgkeuzelijst die laat zien dat de naam van de huidige functie belangrijk is, wordt de naam van de macro weergegeven: do_if.
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
Schakel diagnostische logboekregistratie van IntelliSense-opdrachtregels in om te controleren of de IntelliSense-compiler de juiste compileropties gebruikt, inclusief paden en preprocessormacro's.
Open het deelvenster Extra>Opties en vouw de sectie Alle instellingen>Talen>C/C++>IntelliSense>Diagnostische logboekregistratie uit.
Schakel het selectievakje Diagnostische logboekgegevens in het uitvoervenster in.
Stel de waarde van het logboekregistratieniveau in op 5 (meest uitgebreid).
Stel de waarde voor het logboekregistratiefilter in op 8 (IntelliSense-logboekregistratie).
Open het dialoogvenster Extra>opties en vouw de sectie teksteditor>C/C++>Geavanceerd uit.
Stel in de groep Diagnostische logboekregistratie de optie Logboekregistratie inschakelen in op Waar.
Stel de waarde voor logboekregistratieniveau in op 5 (meest uitgebreid).
Stel de waarde voor het logboekregistratiefilter in op 8 (IntelliSense-logboekregistratie).
Kies OK.
In het uitvoervenster ziet u nu de opdrachtregels 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 Opnemen van uw project bijvoorbeeld bevat $(MyVariable)\Includeen het diagnostische logboek wordt weergegeven /I\Include als een include-pad, betekent dit dat $(MyVariable) dit 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 een git pull of git checkout opdracht uitvoert, kan het tot een uur duren voordat wijzigingen in de bestanden worden gedetecteerd. 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-build oplossen
Een IntelliSense-build produceert geen binaire bestanden, maar kan nog steeds mislukken. Een mogelijke oorzaak voor fouten is aangepast .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 Waar en Visual Studio opnieuw start, ziet u een logboekbestand in de %TEMP% map, wat kan helpen bij het vaststellen van de buildfout.
Zie TRACEDESIGNTIME- en Design-time-builds voor meer informatie over omgevingsvariabele. De informatie in deze artikelen is relevant voor C++-projecten.