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!).  SeeVariables, for more
 information about debugging optimized code.
 

Menu