编译时间分析

7

我有一段C++代码,使用VC7编译需要很长时间。有没有办法对它进行分析,找出为什么编译需要那么长时间?

8个回答

10

在Visual Studio 2008中,有一个设置可以打开构建时间。在VC7中可能也有这个设置...

工具 / 选项 / 项目和解决方案 / VC++项目设置 / 构建时间:

这适用于C++项目,因为(截至VS2008)它们不使用MSBuild。对于基于MSBuild的项目(例如C#),您需要增加详细程度:

工具 / 选项 / 项目和解决方案 / 生成和运行 / MSBuild项目生成输出详细程度

默认情况下,它设置为“最小”。


5
最近,微软的C++ Build Insights SDK引入了一个选项/timetrace到它的vcperf中,允许你对构建进行分析,并以火焰图的形式在任何基于Chromium的浏览器中可视化特定组件的构建时间。
假设你已经下载并安装了vcperf,你需要执行以下步骤:
  1. 通过执行开始其会话
vcperf /start SessionName
  1. 运行您的构建(vcperf系统范围内捕获事件)
  2. 停止会话
vcperf /stop SessionName /timetrace output.json

现在,您可以运行基于Chromium的浏览器,输入<browser_name>://tracing(例如chrome://tracing),并加载output.json文件以进行可视化。

示例可视化取自此处


这也适用于Visual Studio 2017。显示更加混乱(名称被破坏),但仍然非常有用。 - anatolyg

4

如果代码使用了大量的模板,那么你可以尝试进行模板实例化分析。Steven Watanabe设计了分析工具,如果我没记错的话,它应该可以在VS上运行(不知道是哪个版本)。


+1,模板可能会在编译时受到影响,即使使用了预编译头文件。 - SmacL

3

源代码是否在网络上?这有时会大大减慢编译速度。


使用本地快照视图进行构建。 - Pete Kirkham
永远不要使用动态视图来查看源代码,这会带来比它所值得的更多麻烦。 - shoosh

1

我猜测从性能剖析中获取有用的结果可能会很困难。您可以查看每个.obj文件的创建时间,看是否有任何特别缓慢的文件,但我怀疑这种情况会发生。

您是否尝试过编译器选项,例如预编译头文件,以查看它们提供了什么改进?同样,在不需要优化程序的地方关闭优化器可以显著加快构建速度。我的建议是花些时间尝试一些“假设”场景。


1
如果您的代码广泛使用模板,那么您可能会对Templight感兴趣,这是由匈牙利研究团队开发的一种用于调试和分析C++模板元程序的工具(paper)。它看起来非常有前途,但我不确定该工具是否可供下载...

1
Templight正在成为clang内置功能的一部分。 当前版本和可视化工具可以在此处找到:http://plc.inf.elte.hu/templight/ - jmihalicza

0

-1

不幸的是,模板只能在完整的翻译单元中实例化,而不能在预编译头文件中实例化。当我尝试为我的模板重度项目使用预编译头文件时,它们只能将编译时间提高0-5%(无论是否启用优化!)。如果C++17带来了模块,它们可能会有所帮助... - idupree

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接