Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
gcc-g0,不带-g选项_C_Linux_Gcc - Fatal编程技术网

gcc-g0,不带-g选项

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生成的信息最少,足以进行回溯 在程序中不打算调试的部分。这 包括函数和外部变量

在gcc中,不使用
-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
编译是等效的,并且在生成的二进制文件中没有调试信息,这是通过实验发现的