Analice sus compilaciones mediante programación con C ++ Build Insights SDK

Nos complace anunciar el lanzamiento del  SDK de C ++ Build Insights , un marco que le brinda acceso a la información de tiempo de compilación de MSVC a través de las API de C y C ++. Además de esta versión, estamos publicando  vcperf de código abierto en GitHub . Dado que vcperf se construye utilizando el SDK, puede usarlo como referencia al desarrollar sus propias herramientas. Estaremos encantados de ver qué aplicaciones creará utilizando el SDK, ¡y esperamos sus comentarios!



Antecedentes


En noviembre pasado, presentamos vcperf y su complemento Windows Performance Analyzer (WPA) , que ayudan a los usuarios de MSVC a comprender su tiempo de compilación. Ambos componentes se anunciaron bajo los auspicios de C ++ Build Insights. Pero, ¿qué es C ++ Build Insights?

En noviembre, ya dijimos que C ++ Build Insights se basa en  Event Tracing for Windows  (ETW), un mecanismo de rastreo conveniente disponible en el sistema operativo Windows. Pero ETW no fue suficiente para escalar nuestra tecnología a las grandes construcciones C ++ hechas por nuestros clientes. Necesitábamos ajustar el modelo de eventos y los algoritmos de análisis utilizados. El resultado de este trabajo es una nueva plataforma de análisis de datos para MSVC, que ahora llamamos C ++ Build Insights.

Hoy, la plataforma C ++ Build Insights es lo que soportan vcperf y algunas de nuestras herramientas internas. Sin embargo, queríamos brindarles a todos la oportunidad de beneficiarse de esto. Para hacer esto, lo ensamblamos con las interfaces C y C ++ para crear un kit completo de desarrollo de software.

Comience con el SDK de C ++ Build Insights


Use el SDK de C ++ Build Insights para crear herramientas personalizadas que se ajusten a sus scripts:

  1. Analice los rastros mediante programación, no a través de WPA.
  2. Agregue análisis de tiempo de compilación a su integración continua (CI).
  3. ¡O simplemente diviértete!


Así es como puede comenzar con el SDK. Este ejemplo muestra cómo crear un programa que enumera funciones que tardan más de 500 milisegundos en crearse.



  1. Descargue e instale una copia de  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);
}

Una versión clonada e incrustada de este ejemplo también está disponible en nuestro  repositorio de GitHub con ejemplos de C ++ Build Insights. .

Tenga en cuenta que también puede obtener el seguimiento mediante programación, y no a través de vcperf, utilizando el SDK. Consulte los informes del C ++ Build Insights SDK para obtener más detalles .

vcperf ahora es de código abierto


vcperf se crea usando el SDK de C ++ Build Insights, y lo  hacemos de código abierto en GitHub . Esperamos que pueda usarlo para obtener más información sobre el SDK y personalizar vcperf según sus necesidades. El repositorio incluye  un ejemplo de confirmación que extiende vcperf para detectar vinculadores que se reiniciaron debido a errores. El ejemplo resalta estas llamadas en la vista del Explorador de compilación de C ++ Build Insights en WPA. Recomendamos leer este ejemplo de confirmación en el siguiente orden:

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

La razón por la que es posible que desee compilar y ejecutar vcperf desde GitHub hoy es para acceder a nuevos eventos que aún no son compatibles con la versión lanzada de vcperf, incluidos los nuevos eventos de creación de plantillas. Tenga en cuenta que vcperf no está vinculado a ninguna versión específica de Visual Studio, pero los nuevos eventos solo son compatibles con Visual Studio 2019 versión 16.4 y superior. Aquí está la tabla de eventos actualizada:



Comparte tu opinion


Esperamos que disfrute de la versión  C ++ Build Insights SDK , así como la versión de código abierto de vcperf. Descargue Visual Studio 2019  hoy y comience a usar la primera aplicación C ++ Build Insights.

All Articles