C++性能分析工具推荐

6
有没有人能推荐一些用于C++代码编译和运行时分析的工具?我每天都要接到请求,需要在一个非常庞大的代码库中确定某些函数重载的使用位置。
目前我的方法是结合(a)使用grep/find进行文本搜索和(b)伪造包含文件来注释掉相关的重载,然后完全重新编译从而破坏使用了这些重载的构建。如你所想,这非常耗时。
顺便提一下,我在Red Hat Linux平台上进行此操作。

你想静态地知道特定方法的调用位置吗?它们重载有什么特别之处,还是只是很难确定在特定位置调用了N个重载中的哪一个? - Ira Baxter
1
我不认为这是“离题”的。确实,我询问了一个工具推荐的问题,但关闭评论中提到:“相反,描述问题以及迄今为止所做的努力。”如果你阅读问题,我都做到了。 - Component 10
6个回答

9
我使用了gprof和一个名为gprof2dot的脚本的组合,它给出了一个调用图,显示每种方法花费了多少时间。
请参阅gprof上的这篇文章。还可以看一下: 使用GProf分析优化C/C++程序 以下是一个示例调用图,显示每种方法花费的时间(取自gprof2dot页面):

alt text


非常感谢。有一个问题:根据您的回答和您引用的gprof笔记,看起来gprof在运行时分析方面很不错,但是在编译时呢?我真的想知道的不是代码所实际遍历的路径,而是它可能遍历的路径。我现在并不太担心性能时间,但希望能够全面回答像“列出代码库中所有调用X(const char *)的地方”这样的问题。 - Component 10
@Robin Welch:听起来你想要类似cscope的工具http://cscope.sourceforge.net/。另一个可能会对你有用的工具是ctags http://ctags.sourceforge.net/。这些都是用于浏览Linux内核源代码的主要工具之一。 - Robert S. Barnes

3

3

看一下valgrind


3
你可以使用Callgrind,现在它是valgrind项目的一部分。
它有非常好的图形界面来查看结果:KCacheGrind 两者都可在你的发行版中获取。

1

我完全支持 @RA 推荐的 Intel VTune,它值得一看。不要对 gprof 不屑一顾,它无处不在并且是一个很好的入门工具。你可能可以从调试器中获得所需的信息 -- 那么这个调试器是什么呢?

如果你告诉我们你正在使用哪个编译器,我们可能能告诉你它具备哪些帮助功能。


这是gcc版本3.2.3 20030502(Red Hat Linux 3.2.3-34)。请不要嘲笑 - 这不是我的选择,而是客户的选择。 - Component 10
@Robin Welch:没有嘲笑的意图,但是对于GCC也帮不上太多忙。 - High Performance Mark

1

还有TAU,虽然配置可能有些麻烦,但它非常强大。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接