c18
Compiling for debugging
Contents|Index|Previous|Next
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.
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 variablebecause 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.
0