gcc-g0,不带-g选项
在gcc中,不使用gcc-g0,不带-g选项,c,linux,gcc,C,Linux,Gcc,在gcc中,不使用-g选项编译与使用-g0选项编译有什么区别?在gcc中给出-g0选项有什么具体原因吗? 我尝试编译并在GDB中找到了两种情况下的“无调试符号”消息。来自: -glevel -ggdblevel -gstabslevel -gcofflevel -gxcofflevel -gvmslevel 请求调试信息,并使用级别指定如何 很多信息。默认级别为2 级别0完全不生成调试信息。因此,-g0否定-g 级别1生成的信息最少,足以进行回溯 在程序中不打算调试的部分。这 包括函数和外部变量
-g
选项编译与使用-g0
选项编译有什么区别?在gcc中给出-g0
选项有什么具体原因吗?
我尝试编译并在GDB中找到了两种情况下的“无调试符号”消息。来自:
-glevel
-ggdblevel
-gstabslevel
-gcofflevel
-gxcofflevel
-gvmslevel
请求调试信息,并使用级别指定如何
很多信息。默认级别为2
级别0完全不生成调试信息。因此,-g0
否定-g
级别1生成的信息最少,足以进行回溯
在程序中不打算调试的部分。这
包括函数和外部变量的说明,但不包括
有关局部变量和无行号的信息
级别3包括额外信息,例如所有宏
程序中存在的定义。有些调试器支持宏
使用-g3
时进行扩展
-gdwarf-2
不接受串联调试级别,因为GCC
用于支持用于生成调试的选项-gdwarf
DWARF格式第1版中的信息(非常有用
与第2版不同),而且会让人太困惑。
该调试格式早就过时了,但无法删除该选项
现在变了。改为使用附加的-glevel
选项进行更改
DWARF的调试级别
为完整起见,关于默认级别-g
/-g2
-g
在操作系统的本机文件中生成调试信息
格式(STAB、COFF、XCOFF或DWARF 2)。GDB可以处理这个问题
调试信息
在大多数使用stabs格式的系统上,-g
允许使用额外的
只有GDB才能使用的调试信息;这是额外的信息
使调试在GDB中工作得更好,但可能使其他
调试器崩溃或拒绝读取程序。如果你想
控制是否生成额外信息,请使用
-gstabs+
,-gstabs
,-gxcoff+
,-gxcoff
,或-gvms
(见下文)
GCC允许您将-g
与-O
一起使用。被优化的用户所走的捷径
代码有时可能会产生令人惊讶的结果:一些变量
你声明可能根本不存在;控制流可能会短暂移动
在你没有预料到的地方;有些语句可能无法执行
因为它们计算常量结果,或者它们的值已经
近在咫尺;某些语句可能在不同的位置执行,因为
它们已从环路中移出
然而,事实证明调试优化的输出是可能的。这
使优化器合理地用于可能发生故障的程序
有虫子
如果你去GCC,你会发现它说:
-g
级别
请求调试信息,并使用级别指定信息量。默认级别为2
级别0完全不生成调试信息。因此,-g0
否定-g
因此,如果需要调试信息,请不要使用-g0
。如果确实需要调试信息,请记住在创建对象文件(-c
)和链接程序时使用-g
选项
而完全不使用-g
编译和使用-g0
编译是等效的,并且在生成的二进制文件中没有调试信息,这是通过实验发现的