MBy*_*ByD 94
来自文档:
-G
以操作系统的本机格式(stabs,COFF,XCOFF或DWARF 2)生成调试信息.GDB可以使用此调试信息.在大多数使用stabs格式的系统上,-g允许使用只有GDB才能使用的额外调试信息; 这些额外的信息使调试在GDB中更好地工作,但可能使其他调试器崩溃或拒绝读取程序.如果要确定是否生成额外信息,请使用-gstabs +, - gstabs,-gxcoff +, - gxcoff或-gvms(参见下文).
...
-ggdb
生成供GDB使用的调试信息.这意味着使用最具表现力的格式(DWARF 2,stabs或本机格式,如果这两种格式都不受支持),包括GDB扩展(如果可能的话).
-gvmslevel
请求调试信息并使用级别来指定多少信息.默认级别为2.级别0根本不产生调试信息.因此,-g0否定-g.
....
级别3包括额外信息,例如程序中存在的所有宏定义.使用-g3时,某些调试器支持宏扩展.
U00*_*07D 24
tl; dr:要回答您的具体问题,-g3"包括宏定义等额外信息.一些调试器在您使用时支持宏扩展-g3",-g而不包括此额外信息.
更广泛的答案是gcc支持四级调试信息,从-g0(禁用调试信息)到-g3(最大调试信息).
指定-g相当于-g2.奇怪的是,gcc文档几乎没有说明什么信息-g/ -g2包含或排除:
请求调试信息并使用级别来指定多少信息.默认级别为2.级别0根本不产生调试信息.因此,-g0否定-g.
级别1产生的信息最少,足以在程序中不打算调试的部分进行回溯.这包括函数和外部变量的描述,以及行号表,但没有关于局部变量的信息.
级别3包括额外信息,例如程序中存在的所有宏定义.使用-g3时,某些调试器支持宏扩展.