在 g++ 中为 gprof 编译

Posted

技术标签:

【中文标题】在 g++ 中为 gprof 编译【英文标题】:Compiling in g++ for gprof 【发布时间】:2010-05-03 19:10:18 【问题描述】:

我不理解 gprof 关于如何编译程序以使用 gprof 进行分析的文档。在 g++ 中,除了-pg 选项之外,是否还需要使用-g 选项(调试信息)进行编译。在每种情况下,我都会得到不同的结果,我想看看我的应用程序的瓶颈在哪里是发布模式,而不是调试模式,编译器忽略了许多优化(例如内联)

【问题讨论】:

***.com/questions/1777556/alternatives-to-gprof/… -g 并不意味着关闭优化。 -O 控制优化。例如,您可以同时使用 -g-O2 进行编译。 【参考方案1】:

documentation 表明您可以执行任一操作,注意您需要 -g 来表示 line by line profiling。所以如果你想在发布条件下进行分析,并且可以接受不逐行进行,你应该能够在没有 -g 的情况下进行编译。

【讨论】:

我只对函数调用感兴趣,而不是逐行分析。如果没有 -g 选项,许多正在调用的函数不会显示出来。我不认为这是由于内联,因为其中许多方法都是大方法(50 多行代码)。 @myahya,我认为它很可能是内联的。默认情况下,GCC 可以内联最多 400 条内部 GCC 指令的函数(我知道这些不会直接映射到代码行);见bazaar.launchpad.net/~vcs-imports/gcc/trunk/annotate/99780/gcc/…。另外,您使用的是什么编译标志?

以上是关于在 g++ 中为 gprof 编译的主要内容,如果未能解决你的问题,请参考以下文章

Gprof可以更详细吗?

将 gprof 与 makefile 一起使用

C/C++性能分析工具gprof

如何使用带有 gprof 的 makefile 重新编译依赖项?

如何编译要使用 Gprof 分析的驱动程序

使用cmake与makefile调试需要指定的参数[GDB与Gprof参数]