Answers:
从文档:
-G
以操作系统的本机格式(stab,COFF,XCOFF或DWARF 2)生成调试信息。GDB可以使用此调试信息。在大多数使用stabs格式的系统上,-g允许使用仅GDB可以使用的额外调试信息。这些额外的信息可以使调试在GDB中更好地进行,但是可能会使其他调试器崩溃或拒绝读取程序。如果要确定是否要生成其他信息,请使用-gstabs +,-gstabs,-gxcoff +,-gxcoff或-gvms(请参见下文)。
...
-ggdb
产生调试信息以供GDB使用。这意味着要使用可用的最具表现力的格式(DWARF 2,stab或本机格式(如果都不支持),包括GDB扩展名)。
-gvmslevel
请求调试信息,并使用级别指定多少信息。默认级别为2。级别0完全不产生调试信息。因此,-g0取反-g。
....
级别3包含其他信息,例如程序中存在的所有宏定义。使用-g3时,某些调试器支持宏扩展。
tl; dr:要回答您的特定问题,-g3
“包括一些额外的信息,例如宏定义...某些调试器在使用-g3
“ 时支持宏扩展,而-g
没有包括这些额外的信息。
更广泛的答案是,gcc支持从-g0
(禁用调试信息)到-g3
(最大调试信息)四个级别的调试信息。
指定-g
等同于-g2
。奇怪的是,gcc文档很少说明-g
/ -g2
包括或排除了哪些信息:
请求调试信息,并使用级别指定多少信息。默认级别为2。级别0完全不产生调试信息。因此,-g0取反-g。
级别1产生的信息最少,足以在您不打算调试的程序部分中进行追溯。这包括功能和外部变量的描述,以及行号表,但没有有关局部变量的信息。
级别3包含其他信息,例如程序中存在的所有宏定义。使用-g3时,某些调试器支持宏扩展。