理解g ++编译标志

时间:2013-06-20 11:07:08

标签: gcc g++

我想知道每个标志对代码的作用,以了解其开销。我查了一下

man g++代表'-g'旗帜

仅找到"Generate extra code to write profile...."

它没有指明在哪里?

他们的任何详细手册都可以帮助我理解-g / -p做什么吗?

3 个答案:

答案 0 :(得分:5)

“生成额外的代码以编写配置文件”是-p选项,这将添加额外的代码。额外代码的范围是至少一个寄存器加载和函数开始和结束时的一个函数调用,但它确实取决于体系结构。这可能反过来影响编译期间的其他优化,例如寄存器的可用性,内联以及实际运行代码时它可能影响缓存命中率/未命中率,以及执行这些额外指令的直接影响。

-g选项本身不会添加额外的代码,它只会生成成为可执行文件一部分的调试符号,以便调试器可以在使用调试器时找出函数,变量等的位置

答案 1 :(得分:4)

有趣的问题,如果你的起点是gcc手册页,那么找到信息有点困难:-)所以这里有。

基本上-g标志将额外的“调试”信息写入生成的目标文件(.o)和可执行文件中。然后,调试器(比如gdb)可以使用这些额外的信息来帮助理解调试人员正在发生的事情。

因此,例如,如果您有一个变量名称将作为额外信息保留,那么当您使用调试器时,您可以引用您在源代码中使用的变量而不是一些随机内存地址,因为符号调试信息不在那里。

稍微解释了调试选项in the gcc manual here

但是我觉得你需要一个调试介绍。那么看一下GDB introduction by UWA 为了更好地了解正在发生的事情。

分析数据也是如此。 -p在可执行文件中添加了额外信息,以便像prof这样的分析器可以跟踪软件的运行情况,并告诉您大部分时间花在哪里(循环/功能等)以及如何(在)高效的程序是。 :-)

阅读相关内容

文件中的符号信息与调试信息之间存在差异。一旦开始查看链接,您将遇到符号解析。

答案 2 :(得分:-1)

  

他们提供了这样的声明:“生成额外的代码来编写适合分析程序教授的配置文件信息”非提供有关“哪种信息适合分析的信息。”

它被抽象了,因为你不需要知道。

如果您不这么认为,请检查编译器的源代码。