GCC -g VS -g3 GDB标志:有什么区别?(GCC -g vs -g3 GDB Flag:

2019-06-24 05:24发布

当与任一的gcc或锵编译C源代码,始终使用-g标志以产生用于GDB调试信息。

gcc -g -o helloworld helloworld.c

我注意到,有些人建议-g3代替。 是什么之间的区别-g-g3标志? 也有之间的差异-g-ggdb

Answer 1:

从文档 :

-G

产生在操作系统的本机格式(刺,COFF,XCOFF,或DWARF 2)的调试信息。 GDB可以使用此调试信息的工作。 在使用stabs格式大多数系统中,-g允许使用额外的调试信息,只有GDB可以使用; 这些额外的信息使得GDB调试好工作,但可能会让其他调试器崩溃或拒绝读入程序。 如果你想控制某些是否生成额外的信息,使用-gstabs +,-gstabs,-gxcoff +,-gxcoff,或-gvms(见下文)。

...


-ggdb

生产由GDB使用调试信息。 这意味着使用最表现格式提供(DWARF 2,刺,或者如果这两个时间都不支持的本机格式),包括GDB扩展,如果在所有可能的。


-gvmslevel

请求调试信息,还可以使用级指定多少信息。 默认级别为2。0级都不会产生任何调试信息。 因此,-g0否定-g。

....

级3包括额外的信息,例如存在的所有程序中的宏定义。 一些调试器支持宏扩展时使用-g3。



Answer 2:

TL;博士:要回答你的具体问题, -g3 “包括额外的信息,如宏定义一些调试器支持宏扩展时使用。 -g3 ”,而-g不包括这些额外的信息。

更广泛的答案是GCC支持四个水平的调试信息,从-g0通过(调试信息禁用) -g3 (最大调试信息)。

指定-g相当于-g2 。 奇怪的是, 海湾合作委员会的文档中很少提到什么样的信息-g / -g2包括或不包括:

请求调试信息,还可以使用级指定多少信息。 默认级别为2。0级都不会产生任何调试信息。 因此,-g0否定-g。

1级产生最小的信息,足够在你不打算调试的程序的部分进行回溯。 这包括的功能和外部变量,和行号表的描述,但是没有关于本地变量的信息。

级3包括额外的信息,例如存在的所有程序中的宏定义。 一些调试器支持宏扩展时使用-g3。



文章来源: GCC -g vs -g3 GDB Flag: What is the Difference?