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的代码分析师相当不错。它也是跨平台的,当你发现一个特定于平台的瓶颈时,这很好。