Showing results for 
Search instead for 
Did you mean: 

debugging and optimization on Linux

I am modifying someone else's code on Linux, and I get some runtime errors.  The programs are built with the -O3 option.  I wish to debug with gdb and take advantage of as many features as possible, so -debug comes to mind, possibly -traceback

What would be the best combination of options to enable use of gdb?  Would you recommend no -O options at all?


0 Kudos
2 Replies
Valued Contributor I

Turn on all checks at compile

Turn on all checks at compile and run time, e.g. -Wall. Use one or more different compilers, e.g. NAG and/or gfortran. Check the array bounds etc. Usually -O0 is the best for debugging to avoid heavy optimisation, because optimisation oftentimes hinders the output of values and arguments of functions and subroutines in tracebacks and/or debugging sessions. 

0 Kudos
Black Belt

The advice about allowing

The advice about allowing debug to disable optimization at first is good. Eventually you may need to debug with all your optimization enabled Then you need -debug inline_debug_info but you will still find some symbols missing and some reordered operations.  -fno-inline-functions will skip some optimizations and may help with debugging while avoiding requirement for inline_debug_info.  We've seen programming errors which aren't exposed until interprocedural optimization is in use.  Bounds checking (preferably without optimization) may catch such errors.

0 Kudos