这很简单。我需要分析Linux C ++程序:

必备条件:


免费用于非商业用途
gccg++)编译程序一起使用< br可以使用x86-64程序。
使用优化启用功能编译的配置文件程序(-O3)。 (*请参见脚注)
即使启用了优化,也可以显示真实的(已取消组合的)符号名称。 (*请参见脚注)

有用的功能:


易于使用的基本配置文件(检测hot代码)
行粒度(行中的行函数很热门)
组装说明粒度

很好的功能:


GUI(即使是第3方)
容易安装

未来的需求(我现在不需要,但是不久以后会需要):


配置多线程程序
clang配合使用(会很好)

例如,在Windows上,Visual Studio Profiler很好。

我在Linux上尝试了gprof,但是即使启用了-g -pg也无法使其启用优化。


(*)可能需要存在调试和性能分析信息(例如-p -g -pg)。

评论

我忘记了O3,但是perf_events,Oprofile和Valgrind(+ callgrind)可能是最好的候选人。

stackoverflow.com/questions/375913 / ...

#1 楼

我使用valgrind插件/工具callgrind对程序进行了概要分析。

对我来说,当在x86_64下使用-O3添加调试符号时,在-g上优化后可以正常工作。 Valgrind已获得GPL许可。

callgrind手册指出,可以使用kcachegrind或Eclipse Linux Tools可视化输出结果,该声明指出,如果在源中正确注释了fork,它可以进行程序集分析和处理。

易于使用:

valgrind --tool=callgrind ./path/to/executable


它运行程序的速度比正常运行慢,并创建文件callgrind.out.$pid,其中$pid是程序的pid调用(这是在callgrind输出==$pid==的每一行中显示的数字)。

然后可以在kcachegrind中使用

kcachegrind callgrind.out.$pid

对其进行可视化

评论


可惜callgrind太慢了... gprof / sprof呢?

– Aleksei Petrenko
16 Mar 17 '16 at 14:02

#2 楼

您至少应该了解随机暂停技术。
它不能满足您的所有要求,但它比任何自动分析器在查找所谓的“热”代码时更有效,称为“提速的机会”。

更有效的原因是这个。

想象一个理想的探查器。
假设它是随机抽样的程序的状态(包括所有线程的堆栈和内存)。
它具有人工智能和自动编程功能,因此它可以理解程序以及编写该程序的人。
假设它检查了每个程序采样并确定花费时间的全部原因,并正在寻找一种可能的方式来避免花费时间,方法可能是更改某些内容。
如果它看到了这样的加速机会,并在分数X上看到了其中的样本,它可能建议您进行更改,最多可以节省时间的X倍。

那不是出色的分析器?
它可以找到各种各样的东西,而不仅仅是功能花费很多时间而您无能为力。

值得一问的是-它会采样多少个样本
通常的假设是-越多越好-精度越高。
错误!您要查找问题,而不是解决问题。
如果加速机会花费X倍的时间,它将花费10,000个样本的X分数,大约花费10个样本的分数X。
因此,如果它足够大以至于值得修复,那么它就不需要很多样本。
实际上,只需要两次查看一个问题就可以知道它的重要性。
平均而言,它需要2 / X个样本,所以如果X为0.3,则需要6.67个样本。
(统计上的证明在这里。)

好吧,如果您不介意使用自己的头部,并手动采集一些样本,例如使用jstack或调试器,您已经拥有了理想的分析器。
许多程序员都知道这一点,并用它来使他们的代码快速地运行。

评论


这不是软件推荐问题的答案

–user416
2015年4月24日14:34在

@JanDoggen:建议使用任何IDE或编译器发行版附带的调试器。那不是软件吗?我知道很难质疑要进行概要分析需要使用探查器工具的前提,但是如果不能对此前提提出质疑,则会导致找不到较大的加速因素。恕我直言,程序员之所以喜欢探查器,是因为他们有确认偏差。换句话说,他们喜欢听到没有办法加快他们的代码的速度-本质上来说这是最佳的,即使那可能不是真的。

–迈克·邓拉维(Mike Dunlavey)
15年4月24日在16:12

#3 楼

Allinea MAP可以匹配列表中的所有内容-它也可以处理线程的“未来需求”。没有其他类似的东西了-它的开销非常低-通常<5%,而callgrind远远超过100%。

它是商业性的-但出于完整答案的考虑,这里属于
。 />

评论


我支持您的回答,但是出于完整性考虑,我不得不提到最便宜的许可证价格为635英镑(950美元)

–莫格说要恢复莫妮卡
15年3月11日在8:21