Analisis build Anda secara terprogram dengan C ++ Build Insights SDK

Kami sangat senang mengumumkan rilis  C ++ Build Insights SDK , sebuah kerangka kerja yang memberi Anda akses ke informasi waktu pembuatan MSVC melalui C dan C ++ API. Selain rilis ini, kami menerbitkan  vcperf open source di GitHub . Karena vcperf sendiri dibangun menggunakan SDK, Anda dapat menggunakannya sebagai referensi saat mengembangkan alat Anda sendiri. Kami akan senang melihat aplikasi mana yang akan Anda buat menggunakan SDK, dan kami menantikan tanggapan Anda!



Latar Belakang


November lalu, kami memperkenalkan vcperf dan plugin Windows Performance Analyzer (WPA) , yang membantu pengguna MSVC memahami waktu pembuatan mereka. Kedua komponen diumumkan di bawah naungan C ++ Build Insights. Tapi apa itu C ++ Build Insights?

Pada bulan November, kami telah mengatakan bahwa C ++ Build Insights didasarkan pada  Event Tracing for Windows  (ETW), mekanisme pelacakan yang mudah digunakan pada sistem operasi Windows. Tetapi ETW tidak cukup untuk meningkatkan teknologi kami ke C ++ build yang sangat besar yang dibuat oleh pelanggan kami. Kami perlu menyempurnakan model acara dan algoritma analisis yang digunakan. Hasil dari pekerjaan ini adalah platform analisis data baru untuk MSVC, yang sekarang kami sebut C ++ Build Insights.

Hari ini, platform C ++ Build Insights adalah yang didukung oleh vcperf dan beberapa alat internal kami. Namun demikian, kami ingin memberi Anda semua kesempatan untuk mendapat manfaat dari ini. Untuk melakukan ini, kami memasangnya dengan antarmuka C dan C ++ untuk membuat kit pengembangan perangkat lunak yang lengkap.

Mulai dengan C ++ Build Insights SDK


Gunakan C ++ Build Insights SDK untuk membuat alat khusus yang sesuai dengan skrip Anda:

  1. Menganalisa jejak secara terprogram, bukan melalui WPA.
  2. Tambahkan analisis waktu bangun ke integrasi berkelanjutan (CI) Anda.
  3. Atau bersenang-senanglah!


Inilah cara Anda dapat memulai dengan SDK. Contoh ini menunjukkan cara membuat program yang mencantumkan fungsi yang membutuhkan waktu lebih dari 500 milidetik untuk dibuat.



  1. Unduh dan pasang salinan  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);
}

Versi kloning dan tertanam dari contoh ini juga tersedia di repositori GitHub kami  dengan contoh C ++ Build Insights. .

Perhatikan bahwa Anda juga bisa mendapatkan jejak secara program, dan bukan melalui vcperf, menggunakan SDK. Lihat buku putih C ++ Build Insights SDK untuk lebih jelasnya .

vcperf sekarang open source


vcperf sendiri dibuat menggunakan C ++ Build Insights SDK, dan kami  membuatnya open-source di GitHub . Kami harap Anda dapat menggunakannya untuk mempelajari lebih lanjut tentang SDK dan menyesuaikan vcperf dengan kebutuhan Anda. Repositori termasuk  contoh komit yang memperluas vcperf untuk mendeteksi tautan yang dimulai kembali karena kesalahan. Contoh ini menyoroti panggilan ini di tampilan C ++ Build Insights 'Build Explorer di WPA. Kami merekomendasikan membaca contoh komit ini dalam urutan sebagai berikut:

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

Alasan Anda mungkin ingin membangun dan menjalankan vcperf dari GitHub hari ini adalah untuk mengakses acara baru yang belum didukung dalam versi dirilis vcperf, termasuk acara pembuatan template baru. Harap dicatat bahwa vcperf tidak terikat dengan versi spesifik dari Visual Studio, tetapi acara baru hanya didukung di Visual Studio 2019 versi 16.4 dan lebih tinggi. Berikut adalah tabel acara yang diperbarui:



Bagikan pendapat Anda


Kami harap Anda menikmati rilis  C ++ Build Insights SDK , serta versi open source dari vcperf. Unduh Visual Studio 2019  hari ini dan mulai aplikasi C ++ Build Insights pertama.

All Articles