当与任一的gcc或锵编译C源代码,始终使用-g
标志以产生用于GDB调试信息。
gcc -g -o helloworld helloworld.c
我注意到,有些人建议-g3
代替。 是什么之间的区别-g
和-g3
标志? 也有之间的差异-g
和-ggdb
?
当与任一的gcc或锵编译C源代码,始终使用-g
标志以产生用于GDB调试信息。
gcc -g -o helloworld helloworld.c
我注意到,有些人建议-g3
代替。 是什么之间的区别-g
和-g3
标志? 也有之间的差异-g
和-ggdb
?
从文档 :
-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。
TL;博士:要回答你的具体问题, -g3
“包括额外的信息,如宏定义一些调试器支持宏扩展时使用。 -g3
”,而-g
不包括这些额外的信息。
更广泛的答案是GCC支持四个水平的调试信息,从-g0
通过(调试信息禁用) -g3
(最大调试信息)。
指定-g
相当于-g2
。 奇怪的是, 海湾合作委员会的文档中很少提到什么样的信息-g
/ -g2
包括或不包括:
请求调试信息,还可以使用级指定多少信息。 默认级别为2。0级都不会产生任何调试信息。 因此,-g0否定-g。
1级产生最小的信息,足够在你不打算调试的程序的部分进行回溯。 这包括的功能和外部变量,和行号表的描述,但是没有关于本地变量的信息。
级3包括额外的信息,例如存在的所有程序中的宏定义。 一些调试器支持宏扩展时使用-g3。