【问题标题】:Profiling GPRBuild分析 GPRBuild
【发布时间】:2018-09-30 08:13:49
【问题描述】:

我有一个基于 GPR 的大型项目,编译可能需要 30 多分钟。

分析了构建过程后,我注意到许多明显的低效率(多次调用 gprbuild 而不是聚合、过度使用替代文件而不是配置等)。我想知道是否有某种方法可以“分析”构建过程以查看需要这么长时间。

特别是当单个文件发生更改并且其中存在错误时,重新编译大约需要 5 分钟。从理论上讲,应该很快意识到必须重新编译该文件(它是唯一需要重新编译的文件)并开始编译过程,迅速发现错误。

从详细的输出来看,仅解析用于定义构建的大量 gpr 文件网络似乎需要相当长的时间,但我想知道它大部分时间都花在了哪里。

因此我的问题是:是否可以分析 gprbuild 完成的构建?如果有,怎么做?

【问题讨论】:

  • 根据我的经验,gprbuild 很难使用单独定义的开关管理大量源文件。我从来没有足够在意检查问题是否特定于基于每个源文件定义开关,或者问题是否是纯项目文件大小。

标签: ada gprbuild


【解决方案1】:

从低到高复杂度:

  • gprbuild 报告更多关于它对标志-vh 所做的事情的详细信息。
  • 运行 gprbuildstrace
  • 使用gprof 重新构建gprbuild 并使用所需的标志对其进行分析(但请注意gprof 并不总是说实话)。

【讨论】:

  • 回答了这个问题,尽管令人失望的是“几乎没有”。有没有希望在未来合并分析? (例如花 13s 解析 gpr 文件,15s 编译 mass.adb,1s 编译 mass.ads 等)
  • 应该可以了。 AdaCore 的一位工程师正在从头开始重写 Gprbuild,所以现在提出请求也不错。
猜你喜欢
  • 2021-06-07
  • 2019-07-31
  • 1970-01-01
  • 2021-06-07
  • 2020-07-24
  • 1970-01-01
  • 2017-02-24
  • 2019-07-21
  • 2019-07-13
相关资源
最近更新 更多