قم بتحليل إصداراتك برمجيًا باستخدام C ++ Build Insights SDK

يسرنا أن نعلن عن إصدار  C ++ Build Insights SDK ، إطار عمل يمنحك الوصول إلى معلومات وقت بناء MSVC من خلال واجهات برمجة التطبيقات C و C ++. بالإضافة إلى هذا الإصدار ، نقوم بنشر  vcperf مفتوح المصدر على GitHub . نظرًا لأن vcperf نفسه مصمم باستخدام SDK ، يمكنك استخدامه كمرجع عند تطوير أدواتك الخاصة. يسعدنا معرفة التطبيقات التي ستنشئها باستخدام SDK ، ونتطلع إلى ملاحظاتك!



خلفية


في تشرين الثاني (نوفمبر) الماضي ، قدمنا vcperf والمكون الإضافي لـ Windows Performance Analyzer (WPA) ، مما يساعد مستخدمي MSVC على فهم وقت البناء. تم الإعلان عن كلا المكونين تحت رعاية C ++ Build Insights. ولكن ما هو C ++ Build Insights؟

في نوفمبر ، قلنا بالفعل أن C ++ Build Insights يعتمد على  تتبع الأحداث لنظام التشغيل Windows  (ETW) ، وهي آلية تتبع مناسبة متاحة في نظام تشغيل Windows. لكن ETW لم تكن كافية لتوسيع نطاق تقنيتنا لتتوافق مع إصدارات C ++ الكبيرة جدًا التي صنعها عملاؤنا. نحن بحاجة إلى ضبط نموذج الحدث وخوارزميات التحليل المستخدمة. نتيجة هذا العمل هي منصة جديدة لتحليل البيانات لـ MSVC ، والتي نسميها الآن C ++ Build Insights.

اليوم ، منصة C ++ Build Insights هي ما يدعمه vcperf وبعض أدواتنا الداخلية. ومع ذلك ، أردنا أن نعطيكم جميعًا الفرصة للاستفادة من ذلك. للقيام بذلك ، قمنا بتجميعها مع واجهات C و C ++ لإنشاء مجموعة تطوير برامج كاملة.

ابدأ باستخدام C ++ Build Insights SDK


استخدم SDK Build Insights SDK لإنشاء أدوات مخصصة تلائم نصوصك البرمجية:

  1. تحليل آثار برمجياً ، وليس من خلال WPA.
  2. أضف تحليل وقت البناء إلى التكامل المستمر (CI).
  3. أو استمتع فقط!


إليك كيفية بدء استخدام SDK. يوضح هذا المثال كيفية إنشاء برنامج يسرد الوظائف التي تستغرق أكثر من 500 مللي ثانية لإنشاء.



  1. قم بتنزيل وتثبيت نسخة من  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);
}

تتوفر أيضًا نسخة مستنسخة ومضمنة من هذا المثال في  مستودع GitHub مع أمثلة C ++ Build Insights. .

لاحظ أنه يمكنك أيضًا الحصول على التتبع برمجيًا ، وليس من خلال vcperf ، باستخدام SDK. راجع الأوراق البيضاء C ++ Build Insights SDK لمزيد من التفاصيل .

vcperf مفتوح المصدر الآن


تم إنشاء vcperf نفسه باستخدام SDK C ++ Build Insights ، ونجعلها  مفتوحة المصدر على GitHub . نأمل أن تتمكن من استخدامه لمعرفة المزيد حول SDK وتخصيص vcperf وفقًا لاحتياجاتك. يشتمل المستودع  على مثال تنفيذي يمتد vcperf لاكتشاف الروابط التي تم إعادة تشغيلها بسبب الأخطاء. يسلط المثال الضوء على هذه المكالمات في طريقة العرض Explorer Explorer Build Buildights في C ++ في WPA. نوصي بقراءة مثال الالتزام هذا بالترتيب التالي:

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

السبب الذي قد يجعلك ترغب في إنشاء vcperf وتشغيله من GitHub اليوم هو الوصول إلى الأحداث الجديدة التي لم يتم دعمها بعد في الإصدار الذي تم إصداره من vcperf ، بما في ذلك أحداث إنشاء القوالب الجديدة. يرجى ملاحظة أن vcperf غير مرتبط بأي إصدار معين من Visual Studio ، ولكن الأحداث الجديدة مدعومة فقط في الإصدار 16.4 من Visual Studio 2019 والإصدارات الأحدث. إليك جدول الأحداث المحدث:



مشاركة رأيك


نأمل أن تستمتع بإصدار  C ++ Build Insights SDK ، بالإضافة إلى الإصدار المفتوح المصدر من vcperf. قم بتنزيل Visual Studio 2019  اليوم وابدأ في أول تطبيق C ++ Build Insights.

All Articles