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


Включение диагностики C++ в Visual Studio

Начиная с Visual Studio 17.8, Visual Studio помогает анализировать файлы C++ #include :

  • Отображает, как часто и где используется что-то из каждого файла заголовка.
  • Отображает время сборки для каждого #include файла, которое помогает определить возможности оптимизации времени сборки.

Включение диагностики c++ и CodeLens

Функция диагностики включения C++ отключена по умолчанию. Чтобы включить его, щелкните правой кнопкой мыши в редакторе кода, чтобы открыть контекстное меню, и выберите "Включить директивы>включения" #include диагностики.

Снимок экрана: контекстное меню, которое отображается при щелчке правой кнопкой мыши в области редактора кода.

В контекстном меню выделен параметр "Директивы включения", который показывает два варианта: сортировка директив и включение диагностика.

Сведения о #include файлах отображаются через CodeLens, который по умолчанию отключен. Чтобы включить соответствующие параметры CodeLens, перейдите к разделу "Параметры>>текста редактора>всех языков>CodeLens" и убедитесь, что включены ссылки на C++ #include и показать время компиляции C++.

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

В окне параметров задано значение Text Editor > All Languages > CodeLens. Выделены параметры времени компиляции show C++ и Show C++.

Просмотр #include ссылок

Чтобы попробовать включить диагностику, создайте проект консоли C++ . Замените содержимое основного .cpp файла следующим кодом:

#include <iostream>
#include <vector>

// a function that takes a vector of integers and prints them out
void print(std::vector<int> &vec)
{
    for (int i : vec)
    {
        std::cout << i << std::endl;
    }
    std::cout << std::endl;
}

// a function that takes a vector of integers and adds 10 to each element of the vector and store the result in a new vector
std::vector<int> add10(std::vector<int>& vec)
{
    std::vector<int> newVec;
    for (int i : vec)
    {
        newVec.push_back(i + 10);
    }
    return newVec;
}

int main()
{
    std::vector<int> vec = { 7, 5, 16, 8 };

    print(vec);
    auto newVec = add10(vec);
    print(newVec); 
}

Если включена диагностика включения C++, количество раз кода из файла заголовка отображается в текущем файле кода над файлом заголовка. Выглядит следующим образом для предыдущего примера кода:

6 references
#include <iostream>
5 references
#include <vector>

В редакторе кода выберите 5 ссылок выше #include <vector> и сводку расположений, где <vector> код используется в этом файле:

Снимок экрана: окно контекста включения диагностики C++ с указанием того, где используется код из файла заголовка вектора.

В окне контекста диагностики C++ показано, что в коде, где код из файла заголовка вектора используется в текущем файле кода. Например, он используется дважды в определении функции add10 в качестве возвращаемого значения и параметра. Он используется в строке 17 в объявлении newVec и т. д.

Выберите элемент, чтобы перейти к его расположению в коде.

Просмотр #include времени сборки

Чтобы просмотреть время сборки для каждого файла #include, сначала выполните сборку с помощью Build Insights.

Включите Build Insights в главной строке меню, выбрав команду Build>Run Build Insights в сборке решения>. После завершения сборки появится окно, в которое выводится список времени сборки для различных скомпилированных файлов. Вернитесь в окно исходного кода, а время сборки для каждого #include файла отображается в CodeLens. Похоже на следующее:

6 references | Build: 0.3560s
#include <iostream>
5 references | Build 0.0360s
#include <vector>

Если у вас есть #include директива, которая используется редко, но значительно влияет на время компиляции, это средство поможет вам определить его.

В этой статье вы узнали, как включить диагностику и codeLens на C++, а также как использовать диагностику включения C++ для анализа частоты использования файла включения и того, как #include влияет время сборки.

См. также

Обзор очистки в C/C++
Включение сообщений очистки