什么是 Linux 上易于使用的 C++ 分析器? [关闭]
Posted
技术标签:
【中文标题】什么是 Linux 上易于使用的 C++ 分析器? [关闭]【英文标题】:What is a good easy to use profiler for C++ on Linux? [closed] 【发布时间】:2010-11-13 05:11:54 【问题描述】:我需要分析一些在 Linux 上运行 C++ 的代码。你们能推荐一些分析器吗?
【问题讨论】:
您应该添加 Linux 和 C++ 标签。您可能会得到更好的回应和更广泛的意见。 看起来像 ***.com/questions/375913/… 的副本。 例如:likwid、LLTng、oprofile、valgrind、vtune、gprof、perf、gperftools、pTop 斜着看这个问题:slant.co/improve/topics/1005 【参考方案1】:valgrind 是一个知名的 linux 分析器
【讨论】:
认为 valgrind 更适合用于内存泄漏检查。我正在尝试查看哪些函数被调用等 使用名为“callgrind”的套件工具 Valgrind 只是一个用于构建动态工具的框架。虽然,它已成为 Memcheck 的代名词,一种基于 Valgrind 构建的工具。 Callgrind 非常擅长分析器。 valgrind.org/docs/manual/cl-manual.html【参考方案2】:我是Oprofile 的粉丝。它涉及安装一个内核模块,并且有一点学习曲线,但它相当强大,并且对于没有调试符号的优化程序/程序非常有效。
Vtune 是英特尔制造的另一个非常强大的分析器。我相信 Linux 版本对非商业软件是免费的。
还有 dfa 提出的Valgrind 工具套件。 Callgrind 可能是您最感兴趣的。Cachegrind(其功能集是 Callgrind 的子集)和 Massif 也很有趣,但我对后者没有经验。
【讨论】:
oprofile +1,这不是一个“简单的工具” 哈哈,没错。我可能不应该让这听起来那么容易 :) 它当然不像 Vtune 和 Valgrind 工具那样“在它下运行程序”那么简单,但我觉得你很快就会习惯它。 oprofile 看起来很有趣——它支持 x86_64 吗? 很遗憾,VTune 并非免费用于任何用途。【参考方案3】:gprof 是用于分析的标准 gnu 工具。
【讨论】:
【参考方案4】:Google 也有一个很好的分析器作为google-perftools 的一部分——它包含在 Debian / Ubuntu 和可能的其他发行版中。
【讨论】:
【参考方案5】:看看KCacheGrind,它是valgrind 的图形前端,使用起来非常简单。
【讨论】:
【参考方案6】:使用 gprof。
只需使用-pg
标志进行编译(我认为(但不确定)您必须关闭优化。)并使用 gprof 分析您的可执行文件随后将生成的 gmon.out 文件。
例如:
gcc -pg -o whatever whatever.c
./whatever
gprof whatever gmon.out
g++ 和 cpp 也是如此。
【讨论】:
分析未优化的代码有点没有意义,不是吗?同样,使用 -pg 大量修改的分析代码通常会误导您优化错误的位置。 -pg 是链接器选项,而不是编译器【参考方案7】:This is what I use.
【讨论】:
您只需根据手动收集的 10 个样本来判断瓶颈,而不是prof
收集的 1000 个样本。
@DmitryGrigoryev:正确,这实际上告诉您应该修复什么。统计解释为here。事实上,人们犯的第一个错误是认为他们正在寻找“瓶颈”而不是完美但浪费的代码;-)
很好读,谢谢。我完全相信你的观点,当你在调试器中看到一个实际的函数调用时,优化会更容易。而且我明白“瓶颈”并不意味着“好的优化目标”,只是一个潜在的目标。尽管如此,我仍然认为从prof
开始还是有意义的:如果我发现f()
是统计上最有问题的函数,我将多次停止程序直到我到达f()
,而不是仅仅从一个我首先停止的随机函数。【参考方案8】:
从 RotateRight (http://www.rotateright.com) 缩放是我一直在使用的。它具有功能的蝴蝶视图,您可以双击任何功能以深入了解源代码或 asm 代码。使用调试信息 (-g) 构建以查看您的源代码,但您仍应构建和分析 优化 代码。
【讨论】:
刚试了一下这个程序,真的很不错!目前我最喜欢的 Linux 分析器;但值得一提的是,它需要使用-fno-omit-frame-pointer
构建代码才能有效地进行分析。
链接似乎失效了。有谁知道在哪里(或是否)可以在其他地方找到它?【参考方案9】:
看看Sysprof。您的发行版很可能已经可用。
请注意,如果您的应用程序是使用帧指针编译的,那么所有提到的分析器都能发挥最佳作用。也就是说,你应该在 gcc 命令行上使用 -fno-omit-frame-pointer。
【讨论】:
以上是关于什么是 Linux 上易于使用的 C++ 分析器? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章