在Linux上,什么是C ++易于使用的概要分析器?[关闭]


79

我需要分析一些在Linux上运行C ++的代码。你们能推荐一些分析器吗?


1
您应该添加Linux和C ++标记。您可能会得到更好的答复和广泛的意见。
鸭子


例如:likwid,LLTng,oprofile的,Valgrind的不同,VTune,gprof的,香水,gperftools,PTOP

斜向看这个问题:slant.co/improve/topics/1005
ideaman42

Answers:


37

使用gprof。

只需编译 -pgflag进行(我认为(但不确定)您必须进行优化。)并使用gprof分析可执行文件随后生成的gmon.out文件。

例如:

gcc -pg -o whatever whatever.c

./whatever

gprof whatever gmon.out

与g ++和cpp相同。


32
分析未优化的代码是没有意义的,不是吗?同样,使用-pg大量修改的性能分析代码通常会误导您优化错误的位置。
联邦

1
-pg是链接器选项,而不是编译器
Slug Pue


13

我一直在使用RotateRight(http://www.rotateright.com)进行缩放。它具有函数的蝶形视图,您可以双击任何函数以进入源代码或asm代码。使用调试信息(-g)进行构建以查看源代码,但是您仍然应该构建和分析经过优化的代码。


1
只是给了这个程序一个镜头,真的非常不错!目前是我最喜欢的Linux分析器;但是,值得一提的是,它需要与代码一起构建-fno-omit-frame-pointer才能有效地进行概要分析。
Nik Reiman

1
链接似乎已消失。有人知道它可以在其他地方找到吗?
西蒙F

12

我是Oprofile的粉丝。它涉及到安装内核模块,并且需要一些学习技巧,但是它相当强大,并且对于优化的程序/无需调试符号的程序非常有效。

Vtune是Intel制造的另一个非常强大的分析器。我相信Linux版本对于非商业软件是免费的。

dfa还提供了Valgrind工具套件。Callgrind可能是您最感兴趣的。Cachegrind(其功能集是Callgrind的子集)和Massif也很有趣,但是我对后者没有经验。


+1表示个人资料,这不是“简便工具”
dfa

1
哈哈,是的。我可能不应该听起来那么简单:)当然,它不像Vtune和Valgrind工具那样简单“运行程序”,但是我觉得您很快就习惯了。
Falaina

oprofile看起来很有趣-它支持x86_64吗?
LiraNuna

不幸的是,VTune并非免费提供任何用途。
rustyx



2

gprof是用于剖析的标准gnu工具。


2

看看Sysprof。您的发行版很有可能已经可用。

请注意,如果您的应用程序是使用帧指针编译的,则所有提到的探查器都可以最好地工作。也就是说,您应该在gcc命令行上使用-fno-omit-frame-pointer。


1

您将基于对瓶颈的判断基于手动收集的10个样本,而不是由收集的1000个样本prof
德米特里·格里戈里耶夫

1
@DmitryGrigoryev:正确,实际上告诉您应该解决的问题。统计解释在这里。实际上,人们犯的第一个错误是认为他们正在寻找“瓶颈”,而不是完美的但浪费的代码;-)
Mike Dunlavey

很高兴读到,谢谢。我完全同意您的观点,即当您在调试器中看到实际的函数调用时,优化变得容易得多。而且我确实知道,“瓶颈”并不意味着“好的优化目标”,而只是一个潜在的目标。尽管如此,我仍然认为从某种意义上来说prof还是有道理的:如果f()从统计学上看,这是最有问题的功能,那么我将停止该程序几次直到我进入,f()而不是先从我首先停止的随机功能开始。
德米特里·格里戈列耶夫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.