Analise suas compilações programaticamente com o SDK do C ++ Build Insights

Temos o prazer de anunciar o lançamento do SDK do  C ++ Build Insights , uma estrutura que fornece acesso às informações de tempo de compilação do MSVC por meio das APIs C e C ++. Além desta versão, estamos publicando o  vcperf open source no GitHub . Como o vcperf é criado usando o SDK, você pode usá-lo como referência ao desenvolver suas próprias ferramentas. Teremos o maior prazer em ver quais aplicativos você criará usando o SDK e aguardamos seus comentários!



fundo


Em novembro passado, apresentamos o vcperf e seu plug-in Windows Performance Analyzer (WPA) , que ajudam os usuários do MSVC a entender o tempo de compilação. Ambos os componentes foram anunciados sob os auspícios do C ++ Build Insights. Mas o que é o C ++ Build Insights?

Em novembro, já dissemos que o C ++ Build Insights é baseado no   ETW ( Event Tracing for Windows ), um mecanismo de rastreamento conveniente disponível no sistema operacional Windows. Mas a ETW não foi suficiente para escalar nossa tecnologia para as compilações C ++ muito grandes feitas por nossos clientes. Precisávamos ajustar o modelo de evento e os algoritmos de análise usados. O resultado deste trabalho é uma nova plataforma de análise de dados para MSVC, que agora chamamos de C ++ Build Insights.

Hoje, a plataforma C ++ Build Insights é o que o vcperf e algumas de nossas ferramentas internas suportam. No entanto, queríamos dar a todos vocês a oportunidade de se beneficiar disso. Para isso, montamos as interfaces C e C ++ para criar um kit completo de desenvolvimento de software.

Introdução ao SDK do C ++ Build Insights


Use o SDK do C ++ Build Insights para criar ferramentas personalizadas que se ajustam aos seus scripts:

  1. Analise rastreamentos programaticamente, não através do WPA.
  2. Adicione a análise do tempo de compilação à sua integração contínua (CI).
  3. Ou apenas se divertir!


Veja como você pode começar a usar o SDK. Este exemplo mostra como criar um programa que lista funções que levam mais de 500 milissegundos para criar.



  1. Baixe e instale uma cópia do  Visual Studio 2019 .
  2. (trace) .
    1. x64 Native Tools VS 2019.
    2. : vcperf /start MySessionName
    3. C++ , Visual Studio (vcperf ).
    4. : vcperf /stopnoanalyze MySessionName outputFile.etl. (trace) outputFile.etl.

  3. Visual Studio C++.
  4. , « NuGet…» Microsoft.Cpp.BuildInsights NuGet nuget.org. .
  5. .
  6. , 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);
}

Uma versão clonada e incorporada deste exemplo também está disponível em nosso  repositório GitHub com exemplos do C ++ Build Insights. .

Observe que você também pode obter o rastreio programaticamente, e não através do vcperf, usando o SDK. Consulte os white papers do SDK do C ++ Build Insights para obter mais detalhes .

vcperf agora é open source


O vcperf em si é criado usando o SDK do C ++ Build Insights e o tornamos  de código aberto no GitHub . Esperamos que você possa usá-lo para aprender mais sobre o SDK e personalizar o vcperf de acordo com suas necessidades. O repositório inclui  um exemplo de consolidação que estende o vcperf para detectar vinculadores que foram reiniciados devido a erros. O exemplo destaca essas chamadas na visualização Build Explorer do C ++ Build Insights no WPA. Recomendamos a leitura deste exemplo de confirmação na seguinte ordem:

  1. RestartedLinkerDetector.h
  2. BuildExplorerView.cpp
  3. Commands.cpp

O motivo pelo qual você pode criar e executar o vcperf no GitHub hoje é acessar novos eventos que ainda não são suportados na versão lançada do vcperf, incluindo novos eventos de criação de modelo. Observe que vcperf não está vinculado a nenhuma versão específica do Visual Studio, mas novos eventos são suportados apenas no Visual Studio 2019 versão 16.4 e superior. Aqui está a tabela de eventos atualizada:



Compartilhe sua opinião


Esperamos que você goste da versão SDK do  C ++ Build Insights , bem como da versão de código aberto do vcperf. Baixe o Visual Studio 2019  hoje e comece a usar o primeiro aplicativo C ++ Build Insights.

All Articles