【问题标题】:How can I profile a complete C++ build?如何分析完整的 C++ 构建?
【发布时间】:2011-01-10 03:14:05
【问题描述】:

我正在 Windows XP 上用 C++ 开发一个应用程序,使用 Eclipse 作为我的 IDE,以及一个基于 Makefile 的构建系统(使用自定义工具来生成 Makefile)。此外,我正在使用 LZZ,它允许我编写一个文件,然后将其拆分为一个头文件和一个实现文件。我正在使用 TDM 的 GCC 4 端口。

我可以使用哪些工具或技术来准确确定构建过程的每个部分需要多少时间,以及为什么它很慢?

特别感兴趣的是:

  • make 需要多少时间来计算解析 Makefile、确定依赖关系、检查时间戳等?
  • Eclipse 在构建前后需要多长时间?
  • GCC 在解析系统和提升标头上花费了多少时间?

P.S.:这是我的家庭项目,所以昂贵的工具对我来说是遥不可及的,但如果它们特别相关,无论如何都可以在这里记录。

【问题讨论】:

    标签: c++ eclipse makefile profiling build-process


    【解决方案1】:

    由于 Make 和 GCC 对他们正在做的事情非常冗长,因此获取所花费时间的高级概览的一种非常粗略的方法是通过一个为每一行加上时间戳的脚本来管道 make 的输出:

    make | perl -MTime::HiRes -pe "printf '%.5f ', Time::HiRes::time()"
    

    (我正在使用ActivePerl 来执行此操作,但据我所知,Strawberry Perl 现在可能是 Windows 的推荐 Perl 版本。)

    根据自己的喜好重新格式化或处理时间戳。

    要获得有关 GCC 的更多详细信息,请使用--time-report 选项。

    要了解 Eclipse 增加了多少开销,请使用秒表来计算 Eclipse 和命令行的构建时间。

    【讨论】:

      【解决方案2】:

      如果您使用 boost,很可能大部分时间都花在模板实例化和后续优化上。您可以告诉 GCC 报告花费的时间,-time-report(UNIX 选项,可能是 Windows GCC 上的其他内容)

      如果您想加快编译时间,请禁用优化,-O0(最后一个字母是数字 0,第一个字母是大写 o)

      【讨论】:

        【解决方案3】:

        试试SparkBuild,这是一个免费的 gmake/nmake 替代品,它可以生成带注释的构建日志,其中包含构建中每个作业的精确时间信息。您可以将该文件加载到 SparkBuild Insight 中,以图形方式了解时间的去向。

        有关如何使用它的示例,请参阅this blog

        【讨论】:

          【解决方案4】:

          有一个名为remake 的GNU make 版本提供分析信息。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2019-12-24
            • 2022-10-30
            • 1970-01-01
            • 2012-11-11
            • 2011-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多