Condividi tramite


Configurare un progetto C++ per IntelliSense

In alcuni casi, potrebbe essere necessario configurare manualmente il progetto C++ per ottenere il corretto funzionamento di IntelliSense. Per i progetti MSBuild (in base ai .vcxproj file), è possibile modificare le impostazioni nelle proprietà del progetto. Per i progetti non MSBuild, è possibile modificare le impostazioni nel CppProperties.json file nella directory radice del progetto. In alcuni casi, potrebbe essere necessario creare un file di hint per consentire a IntelliSense di comprendere le definizioni di macro. L'IDE di Visual Studio consente di identificare e risolvere i problemi di IntelliSense.

IntelliSense a file singolo

Quando si apre un file che non è incluso in un progetto, Visual Studio offre un certo supporto IntelliSense, ma per impostazione predefinita non vengono visualizzate linee ondulate di errore. Se la barra di spostamento indica File esterni, questo probabilmente spiega perché non vengono visualizzati gli squiggle di errore sotto codice non corretto o perché non è definita una macro del preprocessore.

Controllare l'elenco degli errori

Se un file non è aperto in modalità file singolo e IntelliSense non funziona correttamente, la prima posizione da controllare è la finestra Elenco errori . Per visualizzare tutti gli errori di IntelliSense per il file di origine corrente insieme a tutti i file di intestazione inclusi, scegliere Build + IntelliSense nell'elenco a discesa:

Screenshot della finestra Elenco errori. Build + IntelliSense è selezionato nell'elenco a discesa del filtro.

IntelliSense produce un massimo di 1.000 errori. Se sono presenti più di 1.000 errori nei file di intestazione inclusi in un file di origine, il file di origine mostra solo un singolo segno ondulato di errore proprio all'inizio del file di origine.

Assicurarsi che i percorsi di #include siano corretti

Progetti MSBuild

Se si eseguono le compilazioni all'esterno dell'IDE di Visual Studio e le compilazioni hanno esito positivo, ma IntelliSense non è corretto, è possibile che la riga di comando non sia sincronizzata con le impostazioni del progetto per una o più configurazioni. Fare clic con il pulsante destro del mouse sul nodo del progetto in Esplora soluzioni e assicurarsi che tutti i percorsi #include siano corretti per la configurazione e la piattaforma correnti. Se i percorsi sono identici in tutte le configurazioni e le piattaforme, è possibile selezionare Tutte le configurazioni e Tutte le piattaforme e quindi verificare che i percorsi siano corretti.

Screenshot che mostra l'impostazione Includi directory nella sezione Proprietà di configurazione.

Per visualizzare i valori correnti per le macro di compilazione, ad esempio VC_IncludePath, selezionare l'elenco a discesa Includi directory . Quindi scegliere <Modifica> e selezionare il pulsante Macro .

Progetti Makefile

Per i progetti Makefile basati sul modello di progetto NMake, scegliere NMake in Proprietà di configurazione e quindi scegliere Includi percorso di ricerca nella categoria IntelliSense :

Screenshot che mostra l'impostazione Proprietà di configurazione > N Imposta > percorso di ricerca di inclusione.

Progetti CMake

Per i progetti CMake, assicurarsi che i percorsi #include siano specificati correttamente per tutte le configurazioni in CMakeLists.txt. Altri tipi di progetto potrebbero richiedere un CppProperties.json file. Per altre informazioni, vedere Configurare la navigazione nel codice con CppProperties.json. Assicurarsi che i percorsi siano corretti per ogni configurazione definita nel file.

Se si verifica un errore di sintassi nel CppProperties.json file, IntelliSense nei file interessati non è corretto. Visual Studio visualizza l'errore nella finestra di output.

Problemi del parser di tag

Il parser di tag è un parser C++ fuzzy utilizzato per la navigazione e l'esplorazione. È veloce ma non tenta di comprendere completamente ogni costrutto di codice.

Ad esempio, non valuta le macro del preprocessore e pertanto potrebbe analizzare erroneamente il codice che ne fa uso elevato. Quando il parser tag rileva un costrutto di codice sconosciuto, potrebbe ignorare l'intera area di codice.

Esistono due modi comuni in cui questo problema si manifesta in Visual Studio:

  1. L'IDE offre la creazione di una definizione di funzione per una funzione già definita.

  2. Se la barra di spostamento mostra una macro più interna, la definizione della funzione corrente è stata ignorata:

    Screenshot che mostra il parser di tag ignorando la definizione della funzione.

    Il frammento di codice mostra una definizione di macro per do_if utilizzata all'interno della funzione main. Il parser di tag non riconosce la macro, quindi anziché l'elenco a discesa di spostamento che mostra che il nome della funzione corrente è principale, mostra il nome della macro: do_if.

Per risolvere questi tipi di problemi, aggiungere un file denominato cpp.hint alla radice della directory della soluzione. Per altre informazioni, vedere File di hint.

Gli errori del parser tag vengono visualizzati nella finestra Elenco errori .

Convalidare le impostazioni del progetto con la registrazione diagnostica

Per verificare se il compilatore IntelliSense usa le opzioni del compilatore corrette, incluse le macro Includi percorsi e preprocessore, attivare la registrazione diagnostica delle righe di comando di IntelliSense.

  1. Aprire il riquadro Opzioni strumenti> ed espandere la sezioneTutti i> delle impostazioni >C/C++>Registrazione diagnostica>.

  2. Selezionare la casella di controllo Salva informazioni di diagnostica nella finestra di output.

  3. Impostare il valore del livello di registrazione su 5 (massima verbosità).

  4. Impostare il valore del filtro Registrazione su 8 (registrazione IntelliSense).

  1. Aprire la finestra di dialogo Opzioni strumenti> ed espandere la sezione Editor> di testoC/C++>Avanzate.

  2. Nel gruppo Registrazione diagnostica impostare l'opzione Abilita registrazione su True.

  3. Impostare il valore del livello di log su 5 (più verboso).

  4. Impostare il valore del filtro di registrazione su 8 (registrazione IntelliSense).

  5. Seleziona OK.

La finestra di output mostra ora le righe di comando passate al compilatore IntelliSense. Ecco un output di esempio:

[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

Queste informazioni possono aiutare a capire perché IntelliSense fornisce informazioni non accurate. Ad esempio, se la directory Include del progetto contiene $(MyVariable)\Includee il log di diagnostica viene visualizzato /I\Include come percorso di inclusione, significa che $(MyVariable) non è stato valutato ed è stato rimosso dal percorso di inclusione finale.

Informazioni sul processo di build di IntelliSense

Visual Studio usa un compilatore C++ dedicato per creare e gestire il database che supporta tutte le funzionalità di IntelliSense. Per mantenere sincronizzato il database IntelliSense con il codice, Visual Studio avvia automaticamente le compilazioni di Solo IntelliSense come attività in background in risposta a determinate modifiche apportate alle impostazioni del progetto o ai file di origine.

Tuttavia, in alcuni casi Visual Studio potrebbe non aggiornare il database IntelliSense in modo tempestivo. Ad esempio, quando si esegue un git pull comando o git checkout , Visual Studio potrebbe richiedere fino a un'ora per rilevare le modifiche nei file. È possibile forzare una nuova analisi di tutti i file in una soluzione facendo clic con il pulsante destro del mouse sul nodo del progetto in Esplora soluzioni e scegliendo Riprova soluzione.

Risolvere gli errori di compilazione di IntelliSense

Una compilazione Di IntelliSense non produce file binari, ma può comunque non riuscire. Una possibile causa dell'errore sono i file .props o .targets personalizzati. In Visual Studio 2017 versione 15.6 e successive, gli errori di compilazione di IntelliSense soltanto vengono registrati nella finestra di Output. Per visualizzarli, impostare Mostra output da su Soluzione:

Screenshot che mostra la finestra Output. L'elenco a discesa Mostra output da è impostato su Soluzione.

Il messaggio di errore potrebbe indicare di attivare il tracciamento in fase di progettazione.

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.

Se si imposta la variabile TRACEDESIGNTIME di ambiente su true e si riavvia Visual Studio, viene visualizzato un file di log nella %TEMP% directory, che potrebbe aiutare a diagnosticare l'errore di compilazione.

Per ulteriori informazioni sulla variabile di ambiente TRACEDESIGNTIME, vedere Roslyn e compilazioni al momento della progettazione. Le informazioni contenute in questi articoli sono rilevanti per i progetti C++.