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.