Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Рады рассказать о выпуске C++ Build Insights SDK, фреймворка, который дает вам доступ к информации о времени сборки MSVC через API C и C++. В дополнение к этому выпуску мы публикуем vcperf open source на GitHub. Поскольку сам vcperf построен с использованием SDK, вы можете использовать его в качестве справочного материала при разработке собственных инструментов. Мы будем рады увидеть, какие приложения вы будете создавать с помощью SDK, и мы с нетерпением ждем ваших отзывов!
В прошлом ноябре мы представилиvcperf и его плагин Windows Performance Analyzer (WPA), которые помогают пользователям MSVC понимать время их сборки. Оба компонента были анонсированы под эгидой C++ Build Insights. Но что такое C++ Build Insights?
В ноябре мы уже рассказывали, что C++ Build Insights основан на Event Tracing для Windows (ETW), удобном механизме трассировки, доступном в операционной системе Windows. Но для масштабирования нашей технологии до очень больших сборок C++, сделанных нашими заказчиками, ETW было недостаточно. Нам нужно было точно настроить модель событий и используемые алгоритмы анализа. Результатом этой работы стала новая платформа анализа данных для MSVC, которую мы теперь называем C++ Build Insights.
Сегодня платформа C++ Build Insights — это то, что поддерживает vcperf и некоторые из наших внутренних инструментов. Тем не менее, мы хотели дать всем вам возможность извлечь из этого пользу. Для этого мы собрали его с интерфейсами C и C++, чтобы создать полноценный комплект разработки программного обеспечения.
Используйте C++ Build Insights SDK для создания пользовательских инструментов, соответствующих вашим сценариям:
Вот как вы можете начать работу с SDK. В этом примере показано, как создать программу, в которой перечислены функции, для создания которых требуется более 500 миллисекунд.
Клонируемая и встраиваемая версия этого примера также доступна в нашем репозитории GitHub с примерами C++ Build Insights..
Обратите внимание, что также можно получить трассировку программно, а не через vcperf, используя SDK. Подробности смотрите в официальной документации C ++ Build Insights SDK.
vcperf сам по себе создан с использованием C++ Build Insights SDK, и мы делаем его open-source на GitHub. Мы надеемся, что вы сможете использовать его, чтобы узнать больше о SDK и настроить vcperf под свои нужды. Репозиторий включает пример коммита, который расширяет vcperf для обнаружения компоновщиков, которые были перезапущены из-за ошибок. В примере выделяются эти вызовы в представлении C++ Build Insights 'Build Explorer в WPA. Мы рекомендуем прочитать этот пример фиксации в следующем порядке:
Причина, по которой вы можете захотеть собрать и запустить vcperf из GitHub сегодня, заключается в том, чтобы получить доступ к новым событиям, которые еще не поддерживаются в выпущенной версии vcperf, включая события создания новых шаблонов. Обратите внимание, что vcperf не привязан к какой-либо конкретной версии Visual Studio, но новые события поддерживаются только в Visual Studio 2019 версии 16.4 и выше. Вот обновленная таблица событий:
Надеемся, что вам понравился релиз C++ Build Insights SDK, как и open source-версия vcperf. Скачайте Visual Studio 2019 сегодня и начните работу над первым приложением C++ Build Insights.
Предпосылки
В прошлом ноябре мы представилиvcperf и его плагин Windows Performance Analyzer (WPA), которые помогают пользователям MSVC понимать время их сборки. Оба компонента были анонсированы под эгидой C++ Build Insights. Но что такое C++ Build Insights?
В ноябре мы уже рассказывали, что C++ Build Insights основан на Event Tracing для Windows (ETW), удобном механизме трассировки, доступном в операционной системе Windows. Но для масштабирования нашей технологии до очень больших сборок C++, сделанных нашими заказчиками, ETW было недостаточно. Нам нужно было точно настроить модель событий и используемые алгоритмы анализа. Результатом этой работы стала новая платформа анализа данных для MSVC, которую мы теперь называем C++ Build Insights.
Сегодня платформа C++ Build Insights — это то, что поддерживает vcperf и некоторые из наших внутренних инструментов. Тем не менее, мы хотели дать всем вам возможность извлечь из этого пользу. Для этого мы собрали его с интерфейсами C и C++, чтобы создать полноценный комплект разработки программного обеспечения.
Начните работу с C++ Build Insights SDK
Используйте C++ Build Insights SDK для создания пользовательских инструментов, соответствующих вашим сценариям:
- Анализировать трассировки программно, а не через WPA.
- Добавлять анализ времени сборки в вашу непрерывную интеграцию (CI).
- Или просто повеселиться!
Вот как вы можете начать работу с SDK. В этом примере показано, как создать программу, в которой перечислены функции, для создания которых требуется более 500 миллисекунд.
- Скачайте и установите копию Visual Studio 2019.
- Получите маршрут (trace) вашей сборки.
- Запустите командную строку x64 Native Tools для VS 2019.
- Выполните следующую команду: vcperf /start MySessionName
- Создайте свой проект C++ из любого места, даже из Visual Studio (vcperf собирает события в масштабе всей системы).
- Выполните следующую команду: vcperf /stopnoanalyze MySessionName outputFile.etl. Это сохранит маршрут (trace) вашей сборки в файле outputFile.etl.
- Запустите Visual Studio и создайте новый проект C++.
- Щелкните правой кнопкой мыши на имени вашего проекта, выберите «Управление пакетами NuGet…» и установите последний пакет Microsoft.Cpp.BuildInsights NuGet из официального канала nuget.org. Вам будет предложено принять лицензию.
- Введите следующий код.
- Создайте и запустите, передав путь к outputFile.etl в качестве первого аргумента.
#include <iostream>
#include <CppBuildInsights.hpp>
using namespace Microsoft::Cpp::BuildInsights;
using namespace Activities;
class LongCodeGenFinder : public IAnalyzer
{
public:
// Вызывается драйвером анализа каждый раз, когда происходит остановка активности
// существует в маршруте (trace).
AnalysisControl OnStopActivity(const EventStack& eventStack) override
{
// Проверит, соответствует ли стек событий
// Сигнатура TopFunctionsFinder::CheckForTopFunction's.
// Если это так, он перешлет событие в функцию.
MatchEventStackInMemberFunction(eventStack, this,
&LongCodeGenFinder::CheckForLongFunctionCodeGen);
// Говорит драйверу анализа перейти к следующему событию
return AnalysisControl::CONTINUE;
}
// Эта функция используется для захвата событий активности функции, которые
// внутри CodeGeneration, а также напечатать список функций,
// на создание которых уходит более 500 миллисекунд.
void CheckForLongFunctionCodeGen(CodeGeneration cg, Function f)
{
using namespace std::chrono;
if (f.Duration() < milliseconds(500)) {
return;
}
std::cout << "Duration: " << duration_cast<milliseconds>(
f.Duration()).count();
std::cout << "\t Function Name: " << f.Name() << std::endl;
}
};
int main(int argc, char *argv[])
{
if (argc <= 1) return -1;
LongCodeGenFinder lcgf;
// Давайте создадим группу анализаторов, которые будут получать события в трассировке (trace). У нас есть только один; легко!
auto group = MakeStaticAnalyzerGroup(&lcgf);
// argv[1] должен содержать путь к файлу трассировки
int numberOfPasses = 1;
return Analyze(argv[1], numberOfPasses, group);
}
Клонируемая и встраиваемая версия этого примера также доступна в нашем репозитории GitHub с примерами C++ Build Insights..
Обратите внимание, что также можно получить трассировку программно, а не через vcperf, используя SDK. Подробности смотрите в официальной документации C ++ Build Insights SDK.
vcperf теперь open source
vcperf сам по себе создан с использованием C++ Build Insights SDK, и мы делаем его open-source на GitHub. Мы надеемся, что вы сможете использовать его, чтобы узнать больше о SDK и настроить vcperf под свои нужды. Репозиторий включает пример коммита, который расширяет vcperf для обнаружения компоновщиков, которые были перезапущены из-за ошибок. В примере выделяются эти вызовы в представлении C++ Build Insights 'Build Explorer в WPA. Мы рекомендуем прочитать этот пример фиксации в следующем порядке:
- RestartedLinkerDetector.h
- BuildExplorerView.cpp
- Commands.cpp
Причина, по которой вы можете захотеть собрать и запустить vcperf из GitHub сегодня, заключается в том, чтобы получить доступ к новым событиям, которые еще не поддерживаются в выпущенной версии vcperf, включая события создания новых шаблонов. Обратите внимание, что vcperf не привязан к какой-либо конкретной версии Visual Studio, но новые события поддерживаются только в Visual Studio 2019 версии 16.4 и выше. Вот обновленная таблица событий:
Поделитесь мнением
Надеемся, что вам понравился релиз C++ Build Insights SDK, как и open source-версия vcperf. Скачайте Visual Studio 2019 сегодня и начните работу над первым приложением C++ Build Insights.