C和C++源代码分析工具

Alo*_*ave 23 c c++ profiling

可能重复:
你最喜欢的分析工具是什么(适用于C++)

是否有任何好的工具来分析混合了C和C++的源代码.有什么优点和缺点,你使用过哪些,并建议使用.请不要给我一个谷歌工具列表.我也可以这样做,我想要的是利用使用这些工具的人的个人经验并了解他们的利弊.
提前致谢.

Mat*_*ner 33

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

在我看来,Windows上没有很好的分析工具.

GNU gprof的优点和缺点

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

Google Performance Tools的优缺点

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

相关有用的问题和答案


Mik*_*vey 5

我会恭敬地不同意马特。

我一直在 Windows 上使用的工具是随机暂停技术,它适用于 IDE 支持的所有语言。

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

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

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

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

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

程序的工作方式,它们追踪出一个调用树,它很像我窗外的橡树。它有一个树干(主干),它长出树枝(呼叫点),这些树枝长出更多的树枝,延伸到叶子(指令)和橡子(阻塞呼叫)。

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