gdb: Optimized Code
11 Debugging Optimized Code
***************************
Almost all compilers support optimization. With optimization disabled,
the compiler generates assembly code that corresponds directly to your
source code, in a simplistic way. As the compiler applies more powerful
optimizations, the generated assembly code diverges from your original
source code. With help from debugging information generated by the
compiler, GDB can map from the running program back to constructs from
your original source.
GDB is more accurate with optimization disabled. If you can
recompile without optimization, it is easier to follow the progress of
your program during debugging. But, there are many cases where you may
need to debug an optimized version.
When you debug a program compiled with '-g -O', remember that the
optimizer has rearranged 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!). Variables, for more
information about debugging optimized code.
Menu