【问题标题】:C and C++ source code profiling tools [duplicate]C 和 C++ 源代码分析工具 [重复]
【发布时间】:2011-05-07 16:17:54
【问题描述】:

可能重复:
What's your favorite profiling tool (for C++)

是否有任何好的工具来分析混合 C 和 C++ 的源代码。任何一种的优点和缺点是什么,您使用过哪些并且会推荐使用。请不要让我从谷歌获得工具列表。我也可以这样做,我想要的是利用使用过这些工具并了解它们的优缺点的人的个人经验。
提前致谢。

【问题讨论】:

  • @Will:我已经看过那个帖子了,但它是从 2008 年开始的,有什么好的新补充吗?此外,我的代码是 C 和 C++ 的混合,而不仅仅是 C 或 C++
  • 我个人不知道,只是添加到SO的链接网络。对不起:)
  • @Ben Voight:寻找 Linux 和 Windows 作为目标平台。

标签: c++ c profiling


【解决方案1】:

我发现gprof 是最好的 CPU 热点分析器,Google Performance Tools 是最好的采样分析器。两者都适用于 C 和 C++。

在我看来有no good profiling tools on Windows

GNU gprof 的优缺点

  • 仅限 GCC
  • 适用于 C 和 C++
  • 只处理 CPU 时间和代码内部二进制文件,您需要静态链接的所有内容
  • 非常准确
  • 增加了一点执行开销

Google 性能工具的优缺点

  • 我认为它需要 GNU 工具链
  • 偶尔无法识别符号
  • 非常可定制
  • 输出多种格式,包括 Callgrind 格式,并自动为您加载 KCacheGrind
  • 还有各种内存分析工具
  • 是一个采样分析器,开销最小

相关有用的问题和答案

【讨论】:

  • 感谢您的全面回答:)
  • 我要补充一点,Google Performance Tools 输出的其中一种格式是 Callgrind,KCacheGrind 会被自动调用。
【解决方案2】:

我会恭敬地不同意马特。

我在 Windows 上一直使用的工具是 the random-pausing technique,它适用于 IDE 支持的所有语言。

作为使用它进行性能调整的示例,this case 展示了如何通过一系列步骤实现 43 倍的加速。

gprof有很多问题,listed here,而且根据google-perftools手册,有些相同的问题在那里重复,比如报告程序,不是行,强调自身(本地)时间,强调图形等(我无法从文档中判断它是否在被阻止时采样。)

随着软件系统变得越来越大,自我时间变得越来越不重要。程序计数器大部分时间都花在库例程中或在系统中阻塞。 图变成了巨大的巢穴。 人们问“我知道函数 X 的成本很高,但是函数 X 的问题在哪里? 更重要的是,“瓶颈”越来越大,因为堆栈平均变得更深,堆栈的每一层都是一个新的机会,可以进行更多的函数调用。

Zoom 是一个堆栈采样器示例,它按行报告百分比,并在阻塞时进行采样,并允许用户控制采样以免在用户输入期间稀释样本集。

编辑:对不起,不能单独离开。这是一个新的解释:

程序的工作方式是追踪调用树,这很像我窗外的橡树。它有一个主干(主干),它长出树枝(呼叫站点),然后再长出几级分支到叶子(指令)和橡子(阻塞呼叫)。

当树木外科医生来修剪(优化)它时,他是否只看叶子在哪里(热点)?他是否忽略橡子(阻塞期间没有样本)? 不,他寻找既重(在堆栈上很多)又不健康(不必要)的分支(调用站点)。这些是他修剪的。 这就是随机暂停和 Zoom 所做的,就是帮助找到那些呼叫站点。

【讨论】:

  • 为此我推荐 Google CPU Profiler。
  • @Matt:(我怀疑你是反对票。)你可以推荐它,但正如你所看到的,1)它给你按功能,而不是线,2)它给自己时间,这几乎没有意义,3)它似乎在阻塞时不采样,使其对 I/O 视而不见(vsnprintf 不做 I/O),4)似乎没有实时用户控制采样,所以在在您关心的阶段,您无法对其进行采样的交互式程序。在真正解决问题之前,可以忽略这些问题。然后他们就大不相同了。
  • @Matt:我知道这不符合传统智慧,但这就是我喜欢传统智慧的地方。当你往后看时,你可能会发现宝藏。
【解决方案3】:

您可以使用Callgrind 创建分析输出。它是Valgrind 的一部分。 callgrind-output 可以与KCacheGrind 一起使用,只要您使用的是Linux,这可能值得一看。

【讨论】:

    【解决方案4】:

    AMD CodeAnalyst 很不错。它也是跨平台的,当人们发现特定于平台的瓶颈时,这很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-12
      • 2011-04-17
      • 2010-09-24
      • 1970-01-01
      相关资源
      最近更新 更多