'gcc -g' 和 'gcc -g3' 有什么区别?

What’s the difference between 'gcc -g' and 'gcc -g3'?

有时看到开源代码用'gcc -g3'编译——"g"后加一个数字是什么意思? "g3"与"g"相比有什么先进的特点?

来自关于 -g 的手册:

0 级根本不产生任何调试信息。因此,-g0 否定-g.

级别 1 产生最少的信息,足以在您不打算调试的程序部分进行回溯。这包括函数和外部变量的描述,但没有关于局部变量的信息,也没有行号。

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

根据documentation:

-glevel

Request debugging information and also use level to specify how  much information. The default level is 2.

其中级别 3 表示:

Level 3 includes extra information, such as all the macro definitions present in the program. Some debuggers support macro expansion when you use -g3.