引入C++构建洞察力

C++的构建应该总是更快。在Visual Studio 2019 16.2中,我们通过 加速链接器 明显地。今天,我们很高兴地宣布一个新的工具集,将给你的权力,使自己的改进。如果你曾经在编译C++的时候吃过早餐,那么你可能会问自己:编译器在做什么? 建立C++的洞察力 这是我们最近在回答这个令人生畏的问题和许多其他问题。通过将新的工具与久经考验的 Windows事件跟踪(ETW) 我们正在为我们的C++工具链制作比以前更容易访问的时序信息。使用它来根据您的构建场景定制决策,并改进您的构建时间。

null

入门

C++构建洞察力利用 vcperf公司 ,该工具允许您捕获构建的跟踪并在 Windows性能分析器(WPA) . 最新版本的 vcperf公司 在Visual Studio 2019中提供,但必须单独获取WPA。

1.按照以下步骤获取和配置 vcperf公司 和水渍险:

  1. 下载并安装最新版本 Visual Studio 2019 .
  2. 通过下载和安装 最新Windows ADK .
  3. 复制 性能msvcbuildinsights.dll 从VisualStudio2019的MSVC安装目录到新安装的WPA目录的文件。这个文件是C++构建的见解WPA插件,它必须可以用于WPA正确显示C++构建洞察力事件。
    1. MSVC的安装目录通常是: C:Program Files (x86)Microsoft Visual Studio2019{Edition}VCToolsMSVC{Version}inHostx64x64 .
    2. WPA的安装目录通常是: C:Program Files (x86)Windows Kits10Windows Performance Toolkit .
  4. 打开 性能核心.ini 文件,并为 性能msvcbuildinsights.dll 文件。这告诉WPA在启动时加载C++构建见解。

您还可以获得最新的 vcperf公司 通过克隆和构建 vcperf GitHub存储库 . 您可以将构建的副本与Visual Studio 2019结合使用!

2.按照以下步骤收集构建的跟踪:

  1. 打开高架门 用于VS 2019的x64本机工具命令提示符 .
  2. 获取您的版本的跟踪:
    1. 运行以下命令: vcperf /start MySessionName .
    2. 从任何地方构建您的C++项目,甚至从VisualStudio中构建 vcperf公司 收集系统范围内的事件)。
    3. 运行以下命令: vcperf /stop MySessionName outputFile.etl . 此命令将停止跟踪,分析所有事件,并保存 输出文件.etl 跟踪文件。
  3. 打开你刚刚在WPA中收集的跟踪。

构建资源管理器问题的关键

理解一个构建的核心是对一段时间内发生的事情进行概述。构建资源管理器是我们为此目的而设计的C++构建洞察力的核心元素。将它从左侧的Graph Explorer面板拖到WPA的主分析窗口中。使用它来诊断并行性问题,检测瓶颈,并确定您的构建是否由解析、代码生成或链接控制。

Gif showing the tool in action

千人嘲笑千人削减:汇总统计

最阴险的构建时间问题是那些一点一点地打击你直到伤害如此之大以至于你想知道是什么打击了你。一个常见的例子是对同一头文件的重复解析,因为它包含在许多翻译单元中。每一个包含本身可能不会有很大的影响,但是当与其他包含结合时,可能会对构建时间产生毁灭性的影响。C++构建洞察力提供了汇总统计数据,以帮助您抵御这些威胁。下面举例说明了此功能,其中在整个构建中聚合文件解析统计信息,以确定最耗时的头。要查看构建的这些信息,请从WPA左侧的Graph Explorer面板中选择Files视图。将其拖到分析窗口。

Analysis window showing the number of times a header was included and the accumulative time it took.

你能得到什么信息?

使用C++构建的见解,希望能够获得所有编译器和链接器调用的以下信息。

For the front-end: Overall front-end time, individual files parsing time. For the back-end: overall back-end time, function optimization time, whole program analysis time, code generation thread time, whole program analysis thread time. For the general compiler: overall compiler time, command line, inputs/outputs, working directory, tool path. For the general linker: overall linker time, pass 1 time, pass 2 time, link-time code generation time, command line, inputs/outputs, working directory, tool path.

下载最新版本的副本 Visual Studio 2019 ,今天就开始用C++构建见解吧!有关完整的文档集,请参阅 从C++构建的见解开始 第页。

在本文中,我们与您共享了两个特性,但还有更多的特性要介绍!请继续关注更多的博客文章,详细介绍如何使用C++构建见解来改进构建。

我们期待收到您关于如何使用vcperf和WPA来理解和优化构建的消息。有没有其他的信息你想从C++构建的见解中得到?请在下面的评论中告诉我们您的想法。您也可以通过以下方式与我们联系: visualcpp@microsoft.com ,或在Twitter上 @视觉 .

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