用C++构建洞察SDK编程分析您的构建

我们今天很高兴地宣布 C++构建洞察力SDK 一个框架,它通过C和C++ API提供对MSVC构建时间信息的访问。为了配合这次释放,我们正在 GitHub上的vcperf开源 . 因为 vcperf公司 它本身是用SDK构建的,您可以在开发自己的工具时使用它作为参考。我们很高兴看到您将使用SDK构建什么样的应用程序,我们期待收到您的反馈!

null

背景

去年11月,我们介绍 vcperf及其Windows性能分析器(WPA)插件 帮助MSVC用户了解他们的构建时间。这两个组件都是在C++构建的见解下宣布的。但是C++的构建洞察力是什么呢?

我们已经在十一月涵盖C++构建的见解是基于 Windows事件跟踪 (ETW),Windows操作系统中提供的方便的跟踪机制。但是对于我们的技术,以扩大到非常大的C++构建由我们的客户,ETW是不够的。我们需要微调事件模型和使用的分析算法。这项工作为MSVC提供了一个新的数据分析平台,我们现在称之为C++构建的见解。

今天,C++构建洞察力平台是什么力量 vcperf公司 以及我们的一些内部工具。然而,我们也想给你们所有人一个从中受益的机会。为此,我们将它打包在C和C++接口后面,以创建一个成熟的软件开发工具包。

从C++构建洞察SDK开始

使用C++构建洞察力SDK来构建适合您的场景的自定义工具:

  1. 以编程方式而不是通过WPA分析跟踪。
  2. 将构建时分析添加到持续集成(CI)中。
  3. 或者只是玩得开心!

下面是如何开始使用SDK的。此示例演示如何构建一个程序,该程序列出了生成所需时间超过500毫秒的所有函数。

Capturing a trace with vcperf. Use the /stopnoanalyze command to obtain a trace that is compatible with the C++ Build Insights SDK.

  1. 下载并安装 Visual Studio 2019 .
  2. 获取你的建筑痕迹。
    1. 为VS2019启动x64本机工具命令提示符。
    2. 运行以下命令: vcperf /start MySessionName
    3. 从任何地方构建您的C++项目,甚至从VisualStudio中构建 vcperf公司 收集系统范围内的事件)。
    4. 运行以下命令: vcperf /stopnoanalyze MySessionName outputFile.etl . 这将保存outputFile.etl中生成的跟踪。
  3. 启动VisualStudio并创建新的C++项目。
  4. 右键单击项目名称,选择 管理NuGet包… 并从官方NuGet.org feed安装最新的Microsoft.Cpp.BuildInsights NuGet包。系统将提示您接受许可证。
  5. 键入以下代码。
  6. 通过传递outputFile.etl的路径作为第一个参数来构建和运行。
#include <iostream>
#include <CppBuildInsights.hpp>

using namespace Microsoft::Cpp::BuildInsights;
using namespace Activities;

class LongCodeGenFinder : public IAnalyzer
{
public:
    // Called by the analysis driver every time an activity stop event
    // is seen in the trace. 
    AnalysisControl OnStopActivity(const EventStack& eventStack) override
    {
        // This will check whether the event stack matches
        // TopFunctionsFinder::CheckForTopFunction's signature.
        // If it does, it will forward the event to the function.

        MatchEventStackInMemberFunction(eventStack, this, 
            &LongCodeGenFinder::CheckForLongFunctionCodeGen);

        // Tells the analysis driver to proceed to the next event

        return AnalysisControl::CONTINUE;
    }

    // This function is used to capture Function activity events that are 
    // within a CodeGeneration activity, and to print a list of functions 
    // that take more than 500 milliseconds to generate.

    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 << "	 Function Name: " << f.Name() << std::endl;
    }
};

int main(int argc, char *argv[])
{
    if (argc <= 1) return -1;

    LongCodeGenFinder lcgf;

    // Let's make a group of analyzers that will receive
    // events in the trace. We only have one; easy!
    auto group = MakeStaticAnalyzerGroup(&lcgf);

    // argv[1] should contain the path to a trace file
    int numberOfPasses = 1;
    return Analyze(argv[1], numberOfPasses, group);
}

我们的网站上还提供了这个示例的可克隆和可构建版本 C++构建洞察力示例GITHUB库 .

请注意,也可以使用SDK以编程方式而不是通过vcperf获取跟踪。见官方 C++构建洞察力SDK 有关详细信息,请参阅文档。

vcperf现在是开源的

vcperf公司 本身是使用C++构建洞察力SDK构建的,而我们是 在GitHub上实现开源 . 我们希望您能够使用它来了解更多关于SDK的信息,并进行自定义 vcperf公司 满足你自己的需要。存储库包括 示例提交 延伸 vcperf公司 检测由于错误条件而重新启动的链接器。该示例突出显示了在WPA中C++的构建见解“构建Explorer视图”中的这些调用。建议按以下顺序阅读此提交示例:

  1. 重启LinkerDetector.h
  2. BuildExplorerView.cpp文件
  3. 命令.cpp

您可能希望构建并运行 vcperf公司 今天从GitHub获得对新事件的访问,这些新事件在发布的版本中还不受支持 vcperf公司 ,包括新模板实例化事件。请注意 vcperf公司 与任何特定版本的Visual Studio无关,但新事件仅在Visual Studio 2019版本16.4及更高版本中受支持。以下是更新的事件表:

Updated event table for the latest version of C++ Build Insights. New events include template instantiation times and force-inlined functions.

告诉我们你的想法!

我们希望你会喜欢这本书的发行 C++构建洞察力SDK ,以及 vcperf公司 . 下载Visual Studio 2019 今天,开始您的第一个C++构建见解应用。

在本文中,我们分享了一个简单的示例,说明如何使用SDK来识别在整个构建中需要花费很长时间才能生成的函数。我们还向您指出了用于定制的有用资源 vcperf公司 . 请继续关注更多的例子和代码样本在未来的博客文章!

是否希望SDK支持其他事件?您有哪些定制方式 vcperf公司 满足你的需要?请让我们知道在下面的评论,在Twitter上 (@VisualC) ),或通过电子邮件 visualcpp@microsoft.com .

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享