Analysez vos builds par programme avec le SDK C ++ Build Insights

Nous sommes heureux d'annoncer la sortie du  SDK C ++ Build Insights , un framework qui vous donne accès aux informations de temps de construction MSVC via les API C et C ++. En plus de cette version, nous  publions vcperf open source sur GitHub . Étant donné que vcperf lui-même est construit à l'aide du SDK, vous pouvez l'utiliser comme référence lors du développement de vos propres outils. Nous serons heureux de voir quelles applications vous allez créer à l'aide du SDK, et nous attendons avec impatience vos commentaires!



Contexte


En novembre dernier, nous avons introduit vcperf et son plug - in Windows Performance Analyzer (WPA) , qui aident les utilisateurs de MSVC à comprendre leur temps de construction. Les deux composants ont été annoncés sous les auspices de C ++ Build Insights. Mais qu'est-ce que C ++ Build Insights?

En novembre, nous avons déjà déclaré que C ++ Build Insights est basé sur le  suivi des événements pour Windows  (ETW), un mécanisme de suivi pratique disponible sur le système d'exploitation Windows. Mais ETW n'était pas suffisant pour adapter notre technologie aux très grandes versions C ++ faites par nos clients. Nous devions affiner le modèle d'événement et les algorithmes d'analyse utilisés. Le résultat de ce travail est une nouvelle plateforme d'analyse de données pour MSVC, que nous appelons maintenant C ++ Build Insights.

Aujourd'hui, la plateforme C ++ Build Insights est prise en charge par vcperf et certains de nos outils internes. Néanmoins, nous avons voulu vous donner à tous l'opportunité d'en bénéficier. Pour ce faire, nous l'avons assemblé avec les interfaces C et C ++ pour créer un kit de développement logiciel complet.

Premiers pas avec le SDK C ++ Build Insights


Utilisez le SDK C ++ Build Insights pour créer des outils personnalisés adaptés à vos scripts:

  1. Analysez les traces par programme, pas via WPA.
  2. Ajoutez une analyse du temps de construction à votre intégration continue (CI).
  3. Ou amusez-vous simplement!


Voici comment démarrer avec le SDK. Cet exemple montre comment créer un programme qui répertorie les fonctions dont la création prend plus de 500 millisecondes.



  1. Téléchargez et installez une copie 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);
}

Une version clonée et intégrée de cet exemple est également disponible dans notre  référentiel GitHub avec des exemples C ++ Build Insights. .

Notez que vous pouvez également obtenir la trace par programme, et non via vcperf, à l'aide du SDK. Consultez les livres blancs du SDK C ++ Build Insights pour plus de détails .

vcperf est maintenant open source


vcperf lui-même est créé à l'aide du SDK C ++ Build Insights, et nous le rendons  open-source sur GitHub . Nous espérons que vous pourrez l'utiliser pour en savoir plus sur le SDK et personnaliser vcperf selon vos besoins. Le référentiel comprend  un exemple de validation qui étend vcperf pour détecter les éditeurs de liens qui ont été redémarrés en raison d'erreurs. L'exemple met en évidence ces appels dans la vue Explorateur de build de C ++ Build Insights dans WPA. Nous vous recommandons de lire cet exemple de validation dans l'ordre suivant:

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

La raison pour laquelle vous souhaiterez peut-être créer et exécuter vcperf à partir de GitHub aujourd'hui est d'accéder à de nouveaux événements qui ne sont pas encore pris en charge dans la version publiée de vcperf, y compris les nouveaux événements de création de modèles. Veuillez noter que vcperf n'est lié à aucune version spécifique de Visual Studio, mais les nouveaux événements ne sont pris en charge que dans Visual Studio 2019 version 16.4 et supérieure. Voici le tableau des événements mis à jour:



Donnez votre avis


Nous espérons que vous apprécierez la version du  SDK C ++ Build Insights , ainsi que la version open source de vcperf. Téléchargez Visual Studio 2019  aujourd'hui et lancez-vous sur la première application C ++ Build Insights.

All Articles