The past few months at work I’ve been working with a large legacy codebase,
mostly written in C. In order to debug problems as they come up, I wanted to
use gdb – but it seemed like the program was only ever compiled with
optimizations turned on (-O2
), which can make using gdb a frustrating
experience, as every interesting value you might want to examine has been
optimized out.
After grappling with the build system to pass -O0
in all the right places (a
surprisingly difficult task), I found that the program did not link with
optimizations turned off. Once I got around that, I ran into a crash in some
basic functionality, easily reproducible at -O0
, but not -O2
. This post
contains two tiny contrived programs reproducing those issues.