C ++ рдмрд┐рд▓реНрдб рдЗрдирд╕рд╛рдЗрдЯреНрд╕ SDK рдХреЗ рд╕рд╛рде рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рдмрд┐рд▓реНрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВ

рд╣рдореЗрдВ C ++ рдмрд┐рд▓реНрдб рдЗрдирд╕рд╛рдЗрдЯреНрд╕ SDK рдХреА рд░рд┐рд▓реАрдЬрд╝ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реБрдП рдЦреБрд╢реА рд╣реЛ рд░рд╣реА рд╣реИ  , рдПрдХ рдврд╛рдВрдЪрд╛ рдЬреЛ рдЖрдкрдХреЛ C рдФрд░ C ++ API рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ MSVC рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рдЬрд╛рдирдХрд╛рд░реА рджреЗрддрд╛ рд╣реИред рдЗрд╕ рд░рд┐рд▓реАрдЬ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо GitHub рдкрд░ vcperf рдУрдкрди рд╕реЛрд░реНрд╕ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ  ред рдЪреВрдВрдХрд┐ vcperf рдЦреБрдж SDK рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдЗрд╕реЗ рдЕрдкрдиреЗ рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп рдПрдХ рд╕рдВрджрд░реНрдн рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдореЗрдВ рдпрд╣ рджреЗрдЦрдХрд░ рдЦреБрд╢реА рд╣реЛрдЧреА рдХрд┐ рдЖрдк рдПрд╕рдбреАрдХреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреМрди рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВрдЧреЗ, рдФрд░ рд╣рдо рдЖрдкрдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рддрддреНрдкрд░ рд╣реИрдВ!



рдкреГрд╖реНрдарднреВрдорд┐


рдкрд┐рдЫрд▓реЗ рдирд╡рдВрдмрд░ рдореЗрдВ, рд╣рдордиреЗ vcperf рдФрд░ рдЗрд╕рдХреЗ Windows рдкреНрд░рджрд░реНрд╢рди рд╡рд┐рд╢реНрд▓реЗрд╖рдХ (WPA) рдкреНрд▓рдЧрдЗрди рдХреЛ рдкреЗрд╢ рдХрд┐рдпрд╛ , рдЬреЛ MSVC рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЙрдирдХреЗ рдирд┐рд░реНрдорд╛рдг рд╕рдордп рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рджреЛрдиреЛрдВ рдШрдЯрдХреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ C ++ рдмрд┐рд▓реНрдб рдЗрдирд╕рд╛рдЗрдЯреНрд╕ рдХреЗ рддрддреНрд╡рд╛рд╡рдзрд╛рди рдореЗрдВ рдХреА рдЧрдИ рдереАред рд▓реЗрдХрд┐рди C ++ рдмрд┐рд▓реНрдб рдЗрдирд╕рд╛рдЗрдЯреНрд╕ рдХреНрдпрд╛ рд╣реИ?

рдирд╡рдВрдмрд░ рдореЗрдВ, рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдХрд╣рд╛ рдерд╛ рдХрд┐ рд╕реА ++ рдмрд┐рд▓реНрдб рдЗрдирд╕рд╛рдЗрдЯреНрд╕  рд╡рд┐рдВрдбреЛрдЬ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо (рдИрдЯреАрдбрдмреНрд▓реНрдпреВ) рдХреЗ рд▓рд┐рдП рдИрд╡реЗрдВрдЯ рдЯреНрд░реЗрд╕рд┐рдВрдЧ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ  , рдЬреЛ рд╡рд┐рдВрдбреЛрдЬ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЯреНрд░реЗрд╕рд┐рдВрдЧ рддрдВрддреНрд░ рд╣реИред рд▓реЗрдХрд┐рди ETW рд╣рдорд╛рд░реА рддрдХрдиреАрдХ рдХреЛ рд╣рдорд╛рд░реЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдмрд╣реБрдд рдмрдбрд╝реЗ C ++ рдмрд┐рд▓реНрдб рдореЗрдВ рд╕реНрдХреЗрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рдерд╛ред рд╣рдореЗрдВ рдЗрд╡реЗрдВрдЯ рдореЙрдбрд▓ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдЗрд╕ рдХрд╛рд░реНрдп рдХрд╛ рдкрд░рд┐рдгрд╛рдо MSVC рдХрд╛ рдПрдХ рдирдпрд╛ рдбреЗрдЯрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдордВрдЪ рд╣реИ, рдЬрд┐рд╕реЗ рдЕрдм рд╣рдо C ++ рдмрд┐рд▓реНрдб рдЗрдирд╕рд╛рдЗрдЯреНрд╕ рдХрд╣рддреЗ рд╣реИрдВред

рдЖрдЬ, C ++ рдмрд┐рд▓реНрдб рдЗрдирд╕рд╛рдЗрдЯреНрд╕ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреНрдпрд╛ рд╣реИ vcperf рдФрд░ рд╣рдорд╛рд░реЗ рдХреБрдЫ рдЖрдВрддрд░рд┐рдХ рдЙрдкрдХрд░рдг рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВред рдлрд┐рд░ рднреА, рд╣рдо рдЖрдк рд╕рднреА рдХреЛ рдЗрд╕рд╕реЗ рд▓рд╛рднрд╛рдиреНрд╡рд┐рдд рд╣реЛрдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдЗрд╕реЗ рдкреВрд░реНрдг рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдХрд┐рдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП C рдФрд░ C ++ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд╕рд╛рде рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ред

C ++ рдмрд┐рд▓реНрдб рдЗрдирд╕рд╛рдЗрдЯреНрд╕ SDK рдХреЗ рд╕рд╛рде рдЖрд░рдВрдн рдХрд░реЗрдВ


рдЕрдкрдиреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд┐рдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд╕реНрдЯрдо рдЯреВрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП C ++ рдмрд┐рд▓реНрдб рдЗрдирд╕рд╛рдЗрдЯреНрд╕ SDK рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

  1. рдкреНрд░реЛрдЧреНрд░рд╛рдореЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдбрдмреНрд▓реНрдпреВрдкреАрдП рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд╣реАрдВред
  2. рдЕрдкрдиреЗ рдирд┐рд░рдВрддрд░ рдПрдХреАрдХрд░рдг (CI) рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдб рд╕рдордп рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЬреЛрдбрд╝реЗрдВред
  3. рдпрд╛ рдмрд╕ рдХреБрдЫ рдордЬрд╛!


рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЖрдк рдПрд╕рдбреАрдХреЗ рд╕реЗ рдХреИрд╕реЗ рд╢реБрд░реБрдЖрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП рдЬреЛ рдРрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдмрдирд╛рдиреЗ рдореЗрдВ 500 рдорд┐рд▓реАрд╕реЗрдХрдВрдб рд╕реЗ рдЕрдзрд┐рдХ рд▓рдЧрддреЗ рд╣реИрдВред



  1. рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 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 ++ рдмрд┐рд▓реНрдб рдЗрдирд╕рд╛рдЗрдЯреНрд╕ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рднреА рдЙрдкрд▓рдмреНрдз рд╣реИ  ред ред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЖрдк рдПрд╕рдбреАрдХреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЯреНрд░реЗрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ vcperf рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд╣реАрдВред рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП C ++ рдмрд┐рд▓реНрдб рдЗрдирд╕рд╛рдЗрдЯреНрд╕ SDK рд╢реНрд╡реЗрдд рдкрддреНрд░ рджреЗрдЦреЗрдВ ред

vcperf рдЕрдм рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рд╣реИ


vcperf рд╕реНрд╡рдпрдВ C ++ рдмрд┐рд▓реНрдб рдЗрдирд╕рд╛рдЗрдЯреНрд╕ SDK рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд╣рдо  рдЗрд╕реЗ GitHub рдкрд░ рдУрдкрди-рд╕реЛрд░реНрд╕ рдмрдирд╛рддреЗ рд╣реИрдВ ред рд╣рдореЗрдВ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЖрдк рдПрд╕рдбреАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдкрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП vcperf рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХрдорд┐рдЯ рд╢рд╛рдорд┐рд▓ рд╣реИ  рдЬреЛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдХрд╛рд░рдг рдкреБрдирд░рд╛рд░рдВрдн рдХрд┐рдП рдЧрдП рд▓рд┐рдВрдХрд░реНрд╕ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП vcperf рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг WPA рдореЗрдВ C ++ рдмрд┐рд▓реНрдб рдЗрдирд╕рд╛рдЗрдЯреНрд╕ рдмрд┐рд▓реНрдб рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рджреГрд╢реНрдп рдореЗрдВ рдЗрди рдХреЙрд▓ рдХреЛ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд░рддрд╛ рд╣реИред рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреНрд░рдо рдореЗрдВ рдЗрд╕ рдкреНрд░рддрд┐рдмрджреНрдз рдЙрджрд╛рд╣рд░рдг рдХреЛ рдкрдврд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВ:

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

рдЖрдЬ рдЖрдк GitHub рд╕реЗ vcperf рдХреЛ рдмрдирд╛рдирд╛ рдФрд░ рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдирдП рдЗрд╡реЗрдВрдЯреНрд╕ рддрдХ рдкрд╣реБрдБрдЪрдирд╛ рд╣реИ рдЬреЛ рдЕрднреА рддрдХ vcperf рдХреЗ рд░рд┐рд▓реАрдЬрд╝ рдХрд┐рдП рдЧрдП рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдирдП рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреНрд░рд┐рдПрд╢рди рдИрд╡реЗрдВрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ vcperf рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдмрдВрдзрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдирдП рдЗрд╡реЗрдВрдЯ рдХреЗрд╡рд▓ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 2019 рд╕рдВрд╕реНрдХрд░рдг 16.4 рдФрд░ рдЙрдЪреНрдЪрддрд░ рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВред рдпрд╣рд╛рдБ рдЕрджреНрдпрддрди рдШрдЯрдирд╛ рддрд╛рд▓рд┐рдХрд╛ рд╣реИ:



рдЕрдкрдиреА рд░рд╛рдп рд╕рд╛рдЭрд╛ рдХрд░реЗрдВ


рд╣рдореЗрдВ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЖрдк C ++ рдмрд┐рд▓реНрдб рдЗрдирд╕рд╛рдЗрдЯреНрд╕ SDK рд░рд┐рд▓реАрдЬрд╝ рдХрд╛ рдЖрдирдВрдж рд▓реЗрдВрдЧреЗ  , рд╕рд╛рде рд╣реА vcperf рдХрд╛ рдУрдкрди рд╕реЛрд░реНрд╕ рд╡рд░реНрдЬрди рднреАред  рдЖрдЬ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 2019 рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рдкрд╣рд▓реЗ C ++ рдмрд┐рд▓реНрдб рдЗрдирд╕рд╛рдЗрдЯреНрд╕ рдРрдк рдкрд░ рд╢реБрд░реВ рдХрд░реЗрдВред

All Articles