GCC -g vs -g3 GDB Flag: What is the Difference? GCC -g vs -g3 GDB Flag: What is the Difference? c c

GCC -g vs -g3 GDB Flag: What is the Difference?


From the docs:

-g

Produce debugging information in the operating system's native format (stabs, COFF, XCOFF, or DWARF 2). GDB can work with thisdebugging information. On most systems that use stabs format, -genables use of extra debugging information that only GDB can use; thisextra information makes debugging work better in GDB but probablymakes other debuggers crash or refuse to read the program. If you wantto control for certain whether to generate the extra information, use-gstabs+, -gstabs, -gxcoff+, -gxcoff, or -gvms (see below).

...


-ggdb

Produce debugging information for use by GDB. This means to use the most expressive format available (DWARF 2, stabs, or the nativeformat if neither of those are supported), including GDB extensions ifat all possible.


-gvmslevel

Request debugging information and also use level to specify how much information. The default level is 2. Level 0 produces nodebug information at all. Thus, -g0 negates -g.

....

Level 3 includes extra information, such as all the macro definitionspresent in the program. Some debuggers support macro expansion whenyou use -g3.


tl;dr: To answer your specific question, -g3 "includes extra information such as macro definitions... Some debuggers support macro expansion when you use -g3", while -g does not include this extra information.

The broader answer is that gcc supports four levels of debug information, from -g0 (debug information disabled) through -g3 (maximum debug information).

Specifying -g is equivalent to -g2. Curiously, the gcc docs say little about what information -g/-g2 includes or excludes:

Request debugging information and also use level to specify how much information. The default level is 2. Level 0 produces no debug information at all. Thus, -g0 negates -g.

Level 1 produces minimal information, enough for making backtraces in parts of the program that you don't plan to debug. This includes descriptions of functions and external variables, and line number tables, but no information about local variables.

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