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


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

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

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

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

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

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

Снимок экрана: окно списка ошибок. Сборка + IntelliSense выбрана в раскрывающемся списке фильтра.

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

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

Проекты MSBuild

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

Снимок экрана: параметр

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

Проекты Makefile

Для проектов Makefile, основанных на шаблоне проекта NMake, выберите NMake в разделе "Свойства конфигурации", а затем выберите "Включить путь поиска " в категорию IntelliSense :

Снимок экрана, показывающий настройку

Проекты CMake

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

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

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

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

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

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

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

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

    Снимок экрана: средство синтаксического анализа тегов пропускает определение функции.

    Фрагмент кода показывает определение макроса для do_if, используемого внутри основной функции. Средство синтаксического анализа тегов не понимает макрос, поэтому вместо раскрывающегося списка навигации, отображающего имя текущей функции, отображается имя макроса: do_if.

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

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

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

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

  1. Откройте панель ИнструментыПараметры и разверните раздел Все настройкиЯзыкиC/C++IntelliSense вести журнал диагностики.

  2. Установите флажок "Сохранять диагностическую информацию в окне вывода".

  3. Установите значение параметра Уровень ведения журнала на 5 (наиболее подробный).

  4. Задайте для фильтра ведения журнала значение 8 (ведение журнала IntelliSense).

  1. Откройте диалоговое окно"Параметры>" и разверните раздел "Текстовый редактор>C/C++>Advanced".

  2. В группе ведения журнала диагностики задайте для параметра "Включить ведение журнала " значение True.

  3. Установите для параметра Уровень ведения журнала значение 5 (самый подробный).

  4. Задайте для фильтра ведения журнала значение 8 (ведение журнала IntelliSense).

  5. Нажмите ОК.

В окне вывода теперь отображаются командные строки, передаваемые компилятору 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 и Design-time builds. Информация в этих статьях относится к проектам C++.