作者:巡山小妖 | 来源:互联网 | 2023-09-25 04:31
前言
这几天使用gcc编译的程序,gdb调式的时候,有些外部函数无法跟踪,进不去。 后来发现是因为gcc编译选项没有设置正确,现在找找资料,记录一下。
gcc参数选项
-g选项(-glevle): 生成调式信息,gnu调试器可以利用这个信息。可以在-g后面指定level生成调式信息的数量。level默认是2. (即-g等价于-g2)。
level 为0,不生成任何调式信息。因此,-g0将直接否定了-g选项,等于没有开启-g选项。
level 为1,生成最低限度的调式信息,足够对程序进行回溯跟踪,回溯跟踪指的是监视程序在运行过程中的函数调用历史,另外还包含函数描述信息、外部变量、行号表,但是不包含局部变量。
level 为2,此时产生的调试信息包括扩展的符号表、行号、局部或外部变量信息。
level 为3,包含级别2中的所有调试信息,以及源代码中定义的宏。
另外,上面-g的介绍同样适用于下列的选项,只是编译的环境不一样而已。
-glevel
-ggdblevel
-gstabslevel
-gcofflevel
-gxcofflevel
-gvmslevel
-O选项: 优化编译信息 。可以在-O后面指定levell表示优化的级别。如果不指定level,默认是1(即-O等价于-O1)
level为0:不做任何优化,这是默认的编译选项。(没有指定该选项的时候也是这种情况)
level为1或者不指定(即-O1或者-O): 对程序做部分编译优化,对于大函数,优化编译占用稍微多的时间和相当大的内存。使用本项优化,编译器会尝试减小生成代码的尺寸,以及缩短执行时间,但并不执行需要占用大量编译时间的优化。
level2: 是比O1更高级的选项,进行更多的优化。Gcc将执行几乎所有的不包含时间和空间折中的优化。当设置O2选项时,编译器并不进行循环打开()loop unrolling以及函数内联。与O1比较而言,O2优化增加了编译时间的基础上,提高了生成代码的执行效率。
level为3:比O2更进一步的进行优化。
对优化选项进一步了解,可以参考gcc官网文档,或者:对gcc -O选项有教详细介绍
-Wall选项: 开启所有的警告信息。(-w 不生成任何警告信息)。
未完,持续更新 .....