我们很高兴宣布 C ++ Build Insights SDK的发布,该框架使您可以通过C和C ++ API访问MSVC构建时间信息。除此版本外,我们还在GitHub上发布 vcperf开源。由于vcperf本身是使用SDK构建的,因此在开发自己的工具时可以将其用作参考。我们很高兴看到您将使用SDK创建哪些应用程序,我们期待您的反馈!
背景
去年11月,我们推出了vcperf及其Windows性能分析器(WPA)插件,可帮助MSVC用户了解其构建时间。这两个组件都是在C ++ Build Insights的主持下宣布的。但是什么是C ++ Build Insights?在11月,我们已经说过C ++ Build Insights基于 Windows事件跟踪 (ETW),这是Windows操作系统中提供的一种方便的跟踪机制。但是,ETW不足以将我们的技术扩展到由客户制造的超大型C ++版本。我们需要微调事件模型和使用的分析算法。这项工作的结果是为MSVC提供了一个新的数据分析平台,我们现在将其称为C ++ Build Insights。今天,vcperf和我们的一些内部工具支持C ++ Build Insights平台。但是,我们希望给大家提供从中受益的机会。为此,我们将其与C和C ++接口组装在一起,以创建完整的软件开发套件。开始使用C ++ Build Insights SDK
使用C ++ Build Insights SDK创建适合您脚本的自定义工具:- 以编程方式而不是通过WPA分析跟踪。
- 将构建时间分析添加到您的持续集成(CI)中。
- 或者只是玩一些!
这是您入门SDK的方法。本示例说明了如何创建一个程序,该程序列出了需要花费500毫秒以上的时间才能创建的函数。
- 下载并安装Visual Studio 2019的副本 。
- (trace) .
- x64 Native Tools VS 2019.
- : vcperf /start MySessionName
- C++ , Visual Studio (vcperf ).
- : vcperf /stopnoanalyze MySessionName outputFile.etl. (trace) outputFile.etl.
- Visual Studio C++.
- , « NuGet…» Microsoft.Cpp.BuildInsights NuGet nuget.org. .
- .
- , outputFile.etl .
#include <iostream>
#include <CppBuildInsights.hpp>
using namespace Microsoft::Cpp::BuildInsights;
using namespace Activities;
class LongCodeGenFinder : public IAnalyzer
{
public:
AnalysisControl OnStopActivity(const EventStack& eventStack) override
{
MatchEventStackInMemberFunction(eventStack, this,
&LongCodeGenFinder::CheckForLongFunctionCodeGen);
return AnalysisControl::CONTINUE;
}
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;
auto group = MakeStaticAnalyzerGroup(&lcgf);
int numberOfPasses = 1;
return Analyze(argv[1], numberOfPasses, group);
}
在我们的GitHub存储库中,还可以使用C ++ Build Insights示例获得该示例的克隆和嵌入式版本 。。请注意,您还可以使用SDK以编程方式而不是通过vcperf获取跟踪。有关更多详细信息,请参见C ++ Build Insights SDK白皮书。vcperf现在是开源
vcperf本身是使用C ++ Build Insights SDK创建的,我们 在GitHub上将其开源。我们希望您可以使用它来了解有关SDK的更多信息并根据需要自定义vcperf。该存储库包括 一个示例提交,该提交扩展了vcperf以检测由于错误而重新启动的链接器。该示例在WPA的C ++ Build Insights的Build Explorer视图中突出显示了这些调用。我们建议按以下顺序阅读此提交示例:- RestartedLinkerDetector.h
- BuildExplorerView.cpp
- Commands.cpp
您今天可能要从GitHub构建和运行vcperf的原因是访问vcperf发行版中尚不支持的新事件,包括新模板创建事件。请注意vcperf不受任何特定版本的Visual Studio约束,但是新事件仅在Visual Studio 2019 16.4和更高版本中受支持。这是更新的事件表:
分享您的意见
我们希望您喜欢C ++ Build Insights SDK版本 以及vcperf的开源版本。 立即下载Visual Studio 2019 ,并开始使用第一个C ++ Build Insights应用程序。