理解g ++编译标志

Syn*_*ror 2 gcc g++

我想知道每个标志对代码的作用,以了解它的开销.我检查了

man g++'-g'国旗

并且只发现了 "Generate extra code to write profile...."

它没有指明在哪里?

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

Mat*_*son 5

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

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


Ahm*_*sud 5

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

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

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

调试选项在这里的 gcc 手册中有一些解释

但是我认为你需要一个调试介绍。因此,请查看西澳大学GDB 介绍, 以更好地了解正在发生的事情。

分析数据也是如此。-p在可执行文件中添加额外信息,以便分析器prof可以在软件运行时跟踪软件,并告诉您它大部分时间都花在哪里(什么循环/函数等)以及程序的(低)效率。:-)

要阅读的相关内容

文件中的符号信息和调试信息是有区别的。一旦你开始考虑链接,你就会遇到符号解析。