Partilhar via


Configurar um projeto C++ para IntelliSense

Em alguns casos, talvez seja necessário configurar manualmente seu projeto C++ para que o IntelliSense funcione corretamente. Para projetos do MSBuild (baseados em .vcxproj ficheiros), podes ajustar as definições nas propriedades do projeto. Para projetos que não sejam do MSBuild, ajustas as definições no CppProperties.json ficheiro na pasta raiz do projeto. Em alguns casos, pode ser necessário criar um ficheiro de dicas para ajudar o IntelliSense a compreender definições de macros. O IDE do Visual Studio ajuda você a identificar e corrigir problemas do IntelliSense.

IntelliSense em ficheiro único

Quando abres um ficheiro que não está incluído num projeto, o Visual Studio oferece algum suporte para IntelliSense, mas por defeito não aparecem rabiscos de erro. Se a Barra de Navegação diz Ficheiros Diversos, então isso provavelmente explica porque não vês rabiscos de erro sob código incorreto, ou porque é que uma macro de pré-processador não está definida.

Verifique a lista de erros

Se um ficheiro não estiver aberto em modo de ficheiro único e o IntelliSense não estiver a funcionar corretamente, o primeiro local a verificar é a janela da Lista de Erros . Para ver todos os erros do IntelliSense para o ficheiro fonte atual juntamente com todos os ficheiros de cabeçalho incluídos, escolha Build + IntelliSense no menu suspenso:

Captura de tela da janela da Lista de Erros. Build + IntelliSense está selecionado na lista pendente do filtro.

O IntelliSense produz um máximo de 1.000 erros. Se existirem mais de 1.000 erros nos ficheiros de cabeçalho incluídos por um ficheiro fonte, então o ficheiro fonte mostra apenas um único traço de erro logo no início do ficheiro fonte.

Certifique-se de que os caminhos de #include estão corretos

Projetos MSBuild

Se executares as tuas builds fora do IDE do Visual Studio, e as tuas builds estiverem a funcionar mas o IntelliSense estiver incorreto, é possível que a tua linha de comandos esteja fora de sincronização com as definições do projeto para uma ou mais configurações. Clique com o botão direito do mouse no nó do projeto em Gerenciador de Soluções e verifique se todos os caminhos #include estão corretos para a configuração e a plataforma atuais. Se os caminhos forem idênticos em todas as configurações e plataformas, você poderá selecionar Todas as configurações e Todas as plataformas e verificar se os caminhos estão corretos.

Captura de ecrã que mostra a definição Incluir Diretórios na secção de Propriedades de Configuração.

Para ver os valores atuais de macros de compilação como VC_IncludePath, selecione o menu pendente Incluir Diretórios. Depois escolhe <Editar> e seleciona o botão Macros .

Projetos Makefile

Para projetos Makefile baseados no modelo de projeto NMake, escolha NMake em Propriedades de Configuração e depois selecione Incluir caminho de pesquisa na categoria IntelliSense :

Captura de ecrã que mostra as Propriedades > de Configuração N Incluir > a definição de Caminho de Pesquisa.

Projetos CMake

Para os projetos CMake, certifique-se de que os caminhos de #include estão corretamente especificados para todas as configurações em CMakeLists.txt. Outros tipos de projetos podem exigir um CppProperties.json ficheiro. Para mais informações, veja Configurar navegação de código com CppProperties.json. Verifique se os caminhos estão corretos para cada configuração definida no arquivo.

Se houver um erro de sintaxe no CppProperties.json ficheiro, o IntelliSense nos ficheiros afetados está incorreto. O Visual Studio mostra o erro na Janela de Saída.

Problemas com o analisador de tags

O parser de etiquetas é um parser difuso em C++ usado para exploração e navegação. É rápido, mas não tenta compreender completamente todos os conceitos de código.

Por exemplo, não avalia macros de pré-processador e, por isso, pode analisar incorretamente o código que os faz uso intensivo. Quando o Tag Parser encontra uma construção de código desconhecida, pode saltar toda essa região de código.

Há duas maneiras comuns em que esse problema se manifesta no Visual Studio:

  1. O IDE oferece a criação de uma definição de função para uma função que já está definida.

  2. Se a barra de navegação mostrar uma macro mais interna, então a definição atual da função foi ignorada:

    Captura de ecrã que mostra o parser de etiquetas a saltar a definição da função.

    O excerto de código mostra uma definição de macro para do_if que é usada dentro da função principal. O analisador de etiquetas não entende a macro, por isso, em vez de o menu de navegação suspenso mostrar que o nome da função atual é "main", mostra o nome da macro: do_if.

Para resolver este tipo de problemas, adicione um ficheiro nomeado cpp.hint à raiz do diretório da sua solução. Para mais informações, consulte Ficheiros de Dicas.

Erros do parser de etiquetas aparecem na janela da Lista de Erros .

Validar as definições do projeto com registo de diagnóstico

Para verificar se o compilador do IntelliSense está a usar as opções corretas, incluindo Incluir Caminhos e macros do Pré-processador, ative o Registo de Diagnóstico das linhas de comando do IntelliSense.

  1. Abra o painel Ferramentas Opções> e expanda a secção Todas as Definições>Idiomas>C/C++>IntelliSense>Registo de Diagnóstico.

  2. Selecione a caixa de seleção Registar informação de diagnóstico na janela de saída.

  3. Defina o valor do nível de Registo para 5 (o mais detalhado).

  4. Defina o valor do filtro de Registo para 8 (registo IntelliSense).

  1. Abra o diálogoOpções de > e expanda a secção Editor de Texto>C/C++>Avançado.

  2. No grupo de Registo de Diagnóstico , defina a opção Ativar Registo para Verdadeiro.

  3. Defina o valor do Nível de Registo para 5 (o mais prolixo).

  4. Defina o valor do Filtro de Registo para 8 (registo IntelliSense).

  5. Selecione OK.

A Janela de Saída mostra agora as linhas de comando que são passadas para o compilador IntelliSense. Aqui está um exemplo de resultado:

[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

Esta informação pode ajudá-lo a perceber porque é que a IntelliSense está a fornecer informações imprecisas. Por exemplo, se o diretório de inclusão do seu projeto contém $(MyVariable)\Include, e o registo de diagnóstico mostra /I\Include como um caminho de inclusão, isso significa que $(MyVariable) não foi avaliado e foi removido do caminho final de inclusão.

Sobre a compilação do IntelliSense

O Visual Studio usa um compilador C++ dedicado para criar e manter o banco de dados que alimenta todos os recursos do IntelliSense. Para manter o banco de dados IntelliSense sincronizado com o código, o Visual Studio inicia automaticamente compilações somente do IntelliSense como tarefas em segundo plano em resposta a determinadas alterações feitas nas configurações do projeto ou nos arquivos de origem.

No entanto, em alguns casos, o Visual Studio pode não atualizar o banco de dados IntelliSense em tempo hábil. Por exemplo, quando executas um git pull comando ou git checkout , o Visual Studio pode demorar até uma hora a detetar alterações nos ficheiros. Pode forçar a re-análise de todos os ficheiros numa solução clicando com o botão direito no nó do projeto no Explorador de Soluções e escolhendo Reescanear Solução.

Resolução de falhas de compilação do IntelliSense

Uma build IntelliSense não produz binários, mas ainda assim pode falhar. Uma possível causa de falha são ficheiros personalizados .props ou .targets. No Visual Studio 2017 versão 15.6 e posteriores, erros de compilação apenas com IntelliSense são registados na janela de Saída. Para os ver, defina Mostrar saída de para Solução:

Captura de ecrã que mostra a janela de Saída. A saída Mostrar do menu suspenso está definida como Solução.

A mensagem de erro pode instruí-lo a ativar o rastreamento em tempo de design:

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 definires a variável TRACEDESIGNTIME de ambiente para true e reiniciares o Visual Studio, vês um ficheiro de registo no %TEMP% diretório, que pode ajudar a diagnosticar a falha da compilação.

Para saber mais sobre a variável de ambiente TRACEDESIGNTIME, veja Roslyn e builds em tempo de design. As informações nestes artigos são relevantes para projetos C++.