Поделиться через


Настройка проекта C++ для IntelliSense

В некоторых случаях может потребоваться вручную настроить проект C++ для правильной работы IntelliSense. Для проектов MSBuild (на основе .vcxproj файлов) можно настроить параметры в свойствах проекта. Для проектов, отличных от MSBuild, вы настраиваете параметры в файле CppProperties.json в корневом каталоге проекта. В некоторых случаях может потребоваться создать файл подсказки, чтобы помочь IntelliSense понять определения макросов. Интегрированная среда разработки Visual Studio помогает выявлять и устранять проблемы IntelliSense.

IntelliSense с одним файлом

При открытии файла, который не включен в проект, Visual Studio предоставляет некоторую степень поддержки IntelliSense, но по умолчанию не отображаются подчёркивания ошибок. Если в панели навигации указано Различные файлы, то это, вероятно, объясняет, почему ошибочные волнистые подчеркивания не отображаются под неправильным кодом или почему макрос препроцессора не определен.

Проверка списка ошибок

Если файл не открыт в однофайловом режиме, и IntelliSense работает неправильно, первое место для проверки — это окно списка ошибок. Чтобы просмотреть все ошибки IntelliSense для текущего исходного файла вместе со всеми включенными файлами заголовков, выберите Build + IntelliSense в раскрывающемся списке:

VC++ IntelliSense в списке ошибок

IntelliSense создает максимум 1000 ошибок. Если в заголовочных файлах, включенных в исходный файл, содержится более 1000 ошибок, этот исходный файл показывает только одну ошибку в самом начале.

Убедитесь, что пути #include верны

Проекты MSBuild

Если вы запускаете сборки за пределами интегрированной среды разработки Visual Studio, и сборки выполняются успешно, но IntelliSense неправильно, возможно, что командная строка не синхронизирована с параметрами проекта для одной или нескольких конфигураций. Щелкните правой кнопкой мыши узел проекта в Обозревателе решений и убедитесь, что все #include пути верны для текущей конфигурации и платформы. Если пути идентичны во всех конфигурациях и платформах, можно выбрать Все конфигурации и все платформы, а затем проверить правильность путей.

каталоги VC++, включаемые

Чтобы просмотреть текущие значения макросов сборки, например VC_IncludePath, выберите строку "Включить каталоги" и щелкните раскрывающийся список справа. Затем выберите <Изменить> и нажмите кнопку макросы.

Проекты Makefile

Для проектов Makefile, основанных на шаблоне проекта NMake, выберите NMake в левой панели, а затем выберите Добавить путь поиска в категории IntelliSense:

проект Makefile включает пути

Открыть проекты папок

Для проектов CMake убедитесь, что #include пути указаны правильно для всех конфигураций в CMakeLists.txt. Для других типов проектов может потребоваться файл CppProperties.json. Дополнительные сведения см. в разделе Настройка IntelliSense с помощью CppProperties.json. Убедитесь, что пути верны для каждой конфигурации, определенной в файле.

Если в файле CppProperties.json есть синтаксическая ошибка, IntelliSense в затронутых файлах будет неправильно. Visual Studio отобразит ошибку в окне вывода.

Проблемы синтаксического анализа тегов

Парсер тегов — это "нечеткий" парсер C++, используемый для просмотра и навигации. Это очень быстро, но не пытается полностью понять каждую конструкцию кода.

Например, он не оценивает макросы препроцессора, поэтому может неправильно анализировать код, который активно их использует. Когда средство синтаксического анализа тегов обнаруживает незнакомую конструкцию кода, он может пропустить весь регион кода.

Существует два распространенных способа, которыми эта проблема проявляется в Visual Studio.

  1. Если панель навигации отображает самый внутренний макрос, то текущее определение функции было пропущено:

    средство синтаксического анализа тегов пропускает определение функции

  2. Интегрированная среда разработки предлагает создать определение функции для функции, которая уже определена:

    средство синтаксического анализа тегов предлагает определить существующую функцию

Чтобы устранить эти проблемы, добавьте файл с именем cpp.hint в корневой каталог решения. Дополнительные сведения см. в подсказках .

Ошибки парсера тегов отображаются в окне списка ошибок .

Проверка параметров проекта с помощью журнала диагностики

Чтобы проверить, использует ли компилятор IntelliSense правильные параметры компилятора, включая пути поиска и макросы препроцессора, включите журнал диагностики командных строк IntelliSense в Tools > Параметры > Текстовый редактор > C/C++ > Расширенные > Журнал диагностики. Задайте для параметр Включить ведение журнала значение True, Уровень ведения журнала значение 5 (наиболее подробный) и Фильтр ведения журнала значение 8 (журналирование IntelliSense).

В окне вывода теперь отображаются командные строки, передаваемые компилятору IntelliSense. Ниже приведен пример выходных данных:

[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

Эти сведения помогут вам понять, почему IntelliSense предоставляет неточные сведения. Например, если каталог Include проекта содержит $(MyVariable)\Include, а в журнале диагностики отображается /I\Include в качестве пути включения, это означает, что $(MyVariable) не был оценен и удален из окончательного пути включения.

Сведения о сборке IntelliSense

Visual Studio использует выделенный компилятор C++ для создания и поддержания базы данных, которая управляет всеми функциями IntelliSense. Чтобы обеспечить синхронизацию базы данных IntelliSense с кодом, Visual Studio автоматически запускает сборки только IntelliSense в качестве фоновых задач в ответ на определенные изменения, внесенные в параметры проекта или исходные файлы.

Однако в некоторых случаях Visual Studio не может своевременно обновлять базу данных IntelliSense. Например, при выполнении команды git pull или git checkout Visual Studio может занять до часа, чтобы обнаружить изменения в файлах. Вы можете принудительно выполнить повторное сканирование всех файлов в решении, щелкнув правой кнопкой мыши на узле проекта в 'Обозреватель решений' и выбрав 'Повторное сканирование решения'.

Устранение неполадок при сборке IntelliSense

Сборка IntelliSense не создает двоичные файлы, но все равно может завершиться ошибкой. Одна из возможных причин сбоя — это пользовательские файлы props или .targets. В Visual Studio 2017 версии 15.6 и более поздних версиях ошибки сборки IntelliSense записываются в окно вывода. Чтобы их увидеть, установите Показать вывод из на Решение:

Окно вывода для ошибок решения

Сообщение об ошибке может указать, что необходимо включить трассировку на этапе проектирования:

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.

Если задать для переменной среды TRACEDESIGNTIME значение true и перезапустить Visual Studio, вы увидите файл журнала в каталоге %TEMP%, что может помочь диагностировать сбой сборки.

Дополнительные сведения о переменной среде TRACEDESIGNTIME см. в разделах Roslyn и Common Project System. Информация в этих статьях относится к проектам C++.