VC++提示:使用MSBuild、编译器和链接器获取详细的生成吞吐量诊断

null

我们知道,应用程序的构建吞吐量对开发人员的生产率是一个时间紧迫的问题。我们花了一些时间在 提高链接器吞吐量 以及VS2010中的其他领域,并将在未来的版本中继续研究如何提高总体构建吞吐量。

在这篇博文中,我们将介绍几个选项,以便使用 MSBuild公司 然后深入研究编译器和链接器。

使用MSBuild

使用IDE,可以通过设置“Tools/Options/Projects and Solutions/VC++Project Settings/Build Timings”=“Yes”来启用计时日志记录,或者将生成的详细程度从“Tools/Options/Project and Solutions/Build and Run/MSBuild Project Build output verbosity”提高到“Diagnostics”。

使用这些选项,您可以获得每个项目的性能摘要,还可以获得在目标和任务上花费时间的详细信息。这类信息非常有用,例如,当您试图计算复制任务从多个文件夹复制文件所需的时间时。

1> –全部重新生成已启动:项目:mfc应用程序,配置:调试Win32–

1> 建造开始于2010年1月12日下午5:31:58。

1> u准备清洁:

1>  正在删除文件“Debugmfc app.lastbuildstate”。

1> 初始化BuildStatus:

1>  正在创建“Debugmfc app.unsuccessfulbuild”,因为指定了“AlwaysCreate”。

1> CLC编译:

1>  stdafx.cpp文件

……………

1>  儿童基金会

1>  正在生成代码…

1> 舱单:

1>  正在删除文件“Debugmfc app.exe.embed.manifest”。

1> LinkedManifest公司:

1>  mfc-app.vcxproj->C:Usersuserdocumentsvisual studio 2010Projectsmfc-appDebugmfc-app.exe

1> FinalizeBuild状态:

1>  正在删除文件“Debugmfc app.unsuccessfulbuild”。

1>  触摸“Debugmfc app.lastbuildstate”。

1>

1> 项目绩效总结:

1>    17877毫秒  C:Usersuserdocumentsvisual studio 2010项目mfc-appmfc-appmfc-app.vcxproj   1个电话

1>              17877毫秒  重建                                    1个电话

1>

1> 目标绩效总结:

1>        0毫秒  CreateCustomManifestResourceNames          1个电话

……………

1>      630毫秒  LinkedManifest公司                          1个电话

1>      956毫秒  显示                                   1个电话

1>     2419毫秒  链接                                       1个电话

1>    12738毫秒  CLC编译                                  1个电话

1>

1> 任务绩效总结:

1>        0毫秒  芬登路径                              2个电话

……………

1>     3035毫秒  链接                                       2个电话

1>    12733毫秒  氯                                         2个电话

1>

1> 生成成功。

1>

1> 时间流逝00:00:17.89

==========全部重建:1成功,0失败,0跳过==========

这里有几个“隐藏的”未记录的开关,您可以使用它们来诊断大部分构建时间都花在哪里/如果你想知道时间花在哪里,Bt和/时间开关对你来说可能很有价值。

我们使用/Bt+和/time+对内部吞吐量运行,其中一个工具将输出计时作为输入,并生成每个组件所用时间的摘要列表。这使我们能够获得单个组件的吞吐量测量值(一个有用的工具,有人写和贡献 代码库 )

关于隐藏开关的说明:

这些开关有时是为了诊断而暴露的。它们没有文档记录,并且在将来的版本中将/可能会发生更改。请谨慎使用。

用法

· 要获得较少的详细输出,请使用“cl/Bt”或“link/time”

· 要获得更详细的输出,请使用“cl/Bt+”或“link/time+”(仅适用于VS2010)

使用编译器开关“/Bt”

直接在命令行中添加“/BT”到编译器选项,或者转到Project属性,并在“配置属性/C/C++ +命令行”中添加“/BT”选项。构建之后,突出显示的文本将告诉您在c1x中花费了多少时间( 前端编译器 )和c2( 后端编译器 )

1> –全部重新生成已启动:项目:mfc应用程序,配置:调试Win32–

1> 建造开始于2010年1月13日上午10:44:51。

1> u准备清洁:

1>  正在删除文件“Debugmfc app.lastbuildstate”。

1> 初始化BuildStatus:

1>  正在创建“Debugmfc app.unsuccessfulbuild”,因为指定了“AlwaysCreate”。

1> CLC编译:

1>  stdafx.cpp文件

1>  时间(C:程序文件(x86)Microsoft Visual Studio 10.0vcbinc1x.dll)=6.914s

1>  时间(C:程序文件(x86)Microsoft Visual Studio 10.0VCbinc2.dll)=0.064s

……

1>  正在生成代码…

1>  时间(C:程序文件(x86)Microsoft Visual Studio 10.0VCbinc2.dll)=0.011s

……

1>  时间(C:程序文件(x86)Microsoft Visual Studio 10.0VCbinc2.dll)=0.005s

1> 舱单:

1>  正在删除文件“Debugmfc app.exe.embed.manifest”。

1> LinkedManifest公司:

1>  mfc-app.vcxproj->C:Usersuserdocumentsvisual studio 2010Projectsmfc-appDebugmfc-app.exe

1> FinalizeBuild状态:

1>  正在删除文件“Debugmfc app.unsuccessfulbuild”。

1>  触摸“Debugmfc app.lastbuildstate”。

1>

1> 生成成功。

1>

1> 时间经过00:00:10.92

==========全部重建:1成功,0失败,0跳过==========

使用链接器开关“/时间”

直接在命令行中将“/time”添加到链接器选项中,或者转到“项目属性”,然后在“配置属性”->“链接器”->“命令行”中将“/time”添加到其他选项中。突出显示的文本将告诉您链接器的每个过程花费了多少时间。有关链接器为何执行多次传递的更多信息 在这里

关于LTCG的说明: 链路时间代码生成 LTCG公司 是链接器调用后端(c2.dll)来生成代码的地方。因此,如果您使用generate-LTCG builds,您可能会看到链接器中花费了大量的时间,尽管所有的工作都是由后端编译器完成的。

1> –全部重新生成已启动:项目:mfc应用程序,配置:调试Win32–

1> 建造开始于2010年1月13日上午10:47:39。

1> u准备清洁:

1>  正在删除文件“Debugmfc app.lastbuildstate”。

1> 初始化BuildStatus:

1>  正在创建“Debugmfc app.unsuccessfulbuild”,因为指定了“AlwaysCreate”。

1> CLC编译:

….

1>  正在生成代码…

1> 链接:

1>  通过1:间隔#1,时间=0.187s

1>    等待PDB关闭:总时间=0.484s

1>  通过2:间隔2,时间=0.578s

1>  最终:总时间=0.765s

1> 舱单:

1>  正在删除文件“Debugmfc app.exe.embed.manifest”。

1> LinkedManifest公司:

1>  IncrPass2:间隔#1,时间=0.062s

1>  IncrPass2:间隔#2,时间=0.032s

1>  最终:总时间=0.094s

1>  mfc-app.vcxproj->C:Usersuserdocumentsvisual studio 2010Projectsmfc-appDebugmfc-app.exe

1> FinalizeBuild状态:

1>  正在删除文件“Debugmfc app.unsuccessfulbuild”。

1>  触摸“Debugmfc app.lastbuildstate”。

1>

1> 生成成功。

1>

1> 时间经过00:00:10.82

==========全部重建:1成功,0失败,0跳过==========

如果您有任何问题或有提示/故事想分享,请发表评论到这个博客,我们会在适当的地方回应。

谢谢 ,

维卡斯·巴蒂亚

VC++团队

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