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

C and C++ source code profiling tools

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
What's your favorite profiling tool (for C++)

有没有什么好的工具来配置一个C和C++混合的源代码。有哪些优点和缺点,你用过哪些,会推荐哪些。请不要给我一份谷歌工具列表。我也可以这样做,我想要的是充分利用使用这些工具的人的个人经验,了解他们的利弊。事先谢谢。


我发现gprof是最好的CPU热点分析器,而google性能工具是最好的采样分析器。两者都为C和C++工作。

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

GNU gprof优缺点

  • 仅限海产品
  • 用C和C++工作
  • 只处理CPU时间,以及二进制文件中的代码,您需要所有您想要配置的静态链接的内容。
  • 非常准确
  • 为执行增加少量开销

谷歌性能工具的优缺点

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

相关有用的问题和答案

  • 用clang代替-pg?
  • 你最喜欢的剖析工具(C++)
  • gprof的替代方案
  • C++代码剖析器
  • 混淆gprof输出


我会尊重地反对马特。

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

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

gprof有很多问题,列在这里,根据google perftools手册,一些相同的问题在那里重复,例如报告程序,而不是行,强调自我(本地)时间,强调图表等(如果文档被阻止时采样,我无法从文档中分辨。)

随着软件系统变得越来越大,自我时间变得越来越不相关。程序计数器将其大部分时间用于库例程或在系统中阻塞。图形变成了巨大的巢。人们会问"我知道函数x很昂贵,但是函数x的问题在哪里?"更重要的是,"瓶颈"变得越来越大,因为堆栈的平均深度越来越深,而堆栈的每一层都是进行更多函数调用的新机会。

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

编辑:对不起,一个人呆得不够好。下面是一个新的解释:

程序的工作方式是,它们跟踪一个调用树,这很像我窗外的橡树。它有一个树干(主干),它发芽枝条(呼叫点),枝条再发芽几级,形成叶子(指令)和橡子(阻塞呼叫)。

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


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


AMD的代码分析师相当不错。它也是跨平台的,当你发现一个特定于平台的瓶颈时,这很好。