gdb.info: Compilation

Go forward to Starting
Go up to Running
Go to the top op gdb

Compiling for debugging

In order to debug a program effectively, you need to generate debugging
information when you compile it.  This debugging information is stored
in the object file; it describes the data type of each variable or
function and the correspondence between source line numbers and
addresses in the executable code.
   To request debugging information, specify the `-g' option when you
run the compiler.
   Most compilers do not include information about preprocessor macros
in the debugging information if you specify the `-g' flag alone,
because this information is rather large.  Version 3.1 of GCC, the GNU
C compiler, provides macro information if you specify the options
`-gdwarf-2' and `-g3'; the former option requests debugging information
in the Dwarf 2 format, and the latter requests "extra information".  In
the future, we hope to find more compact ways to represent macro
information, so that it can be included with `-g' alone.
   Many C compilers are unable to handle the `-g' and `-O' options
together.  Using those compilers, you cannot generate optimized
executables containing debugging information.
   GCC, the GNU C compiler, supports `-g' with or without `-O', making
it possible to debug optimized code.  We recommend that you _always_
use `-g' whenever you compile a program.  You may think your program is
correct, but there is no sense in pushing your luck.
   When you debug a program compiled with `-g -O', remember that the
optimizer is rearranging your code; the debugger shows you what is
really there.  Do not be too surprised when the execution path does not
exactly match your source file!  An extreme example: if you define a
variable, but never use it, GDB never sees that variable--because the
compiler optimizes it out of existence.
   Some things do not work as well with `-g -O' as with just `-g',
particularly on machines with instruction scheduling.  If in doubt,
recompile with `-g' alone, and if this fixes the problem, please report
it to us as a bug (including a test case!).
   Older versions of the GNU C compiler permitted a variant option
`-gg' for debugging information.  GDB no longer supports this format;
if your GNU C compiler has this option, do not use it.