C和C ++源代码分析工具
可能重复:
你最喜欢的分析工具是什么(适用于C ++)
是否有任何好的工具来分析混合了C和C ++的源代码。 有什么优点和缺点,你使用过哪些,并建议使用。 请不要给我一个谷歌工具列表。 我也可以这样做,我想要的是利用使用这些工具的人的个人经验并了解他们的利弊。
提前致谢。
我发现gprof是最好的CPU热点分析器,而Google Performance Tools是最好的采样分析器。 两者都适用于C和C ++。
在我看来,Windows上没有很好的分析工具 。
GNU gprof的优点和缺点
- 仅限GCC
- 适用于C和C ++
- 只处理CPU时间和二进制内部的代码,您需要静态链接的所有内容
- 非常精准
- 为执行添加一小部分开销
Google Performance Tools的优缺点
- 我认为它需要GNU工具链
- 偶尔无法识别符号
- 非常可定制
- 输出各种格式,包括Callgrind格式,并自动为您加载KCacheGrind
- 还有各种内存分析工具
- 是一个采样分析器,开销最小
相关有用的问题和答案
- 替代-pg与Clang?
- 你最喜欢的分析工具是什么(适用于C ++)
- gprof的替代品
- C ++代码分析器
- 令人困惑的gprof输出
我恭敬地不同意马特。
我在Windows上一直使用的工具是随机暂停技术 ,它适用于IDE支持的所有语言。
作为使用它进行性能调整的一个例子, 这个案例展示了如何通过一系列步骤实现43次加速。
Gprof有很多问题, 在这里列出 ,并根据google-perftools手册,在那里重复了一些相同的问题,例如报告程序,而不是行,强调自己(本地)时间,强调图表等(我无法从文档中看出它是否在被阻止时进行采样。)
随着软件系统变得越来越大,自我时间变得越来越不相关。 程序计数器将大部分时间用在库例程中或在系统中被阻止。 图形变成了巨大的巢穴。 人们问“我知道Xfunction成本很高,但functionX的问题在哪里?” 更重要的是,“瓶颈”变得越来越大,因为堆栈平均越来越深,堆栈的每一层都是一个新的机会,可以进行比必要更多的函数调用。
堆栈采样器的一个示例是逐行报告,采样被阻止,并允许用户控制采样,以便在用户输入期间不稀释样本集,是Zoom 。
编辑:对不起,不能单独离开。 这是一个新的解释:
程序工作的方式,他们追踪一个呼叫树,这很像我窗外的橡树。 它有一个树干(主要)发芽分支(呼叫站点),它发出更多的分支,分为几个级别的叶子(指令)和橡子(阻塞呼叫)。
当树木外科医生来修剪(优化)它时,他只看到叶子在哪里(热点)? 他是否忽略了橡子(在封锁期间没有样品)? 不,他寻找既重(在堆栈上很多)又不健康(不必要)的分支(呼叫站点)。 这些都是他修剪的。 这就是随机暂停和Zoom这样做有助于找到那些呼叫站点。
您可以使用Callgrind创建分析输出。 它是Valgrind的一部分。 Callgrind-output可以和KCacheGrind一起使用,只要你使用Linux,这可能值得一看。
AMD CodeAnalyst相当不错。 它也是跨平台,当找到特定于平台的瓶颈时,这是很好的。