The first time I've heard of this flag was while reading "Computer Systems, a Programmer's Approach". Before that, I've always just used plain -g.
According to the man pages:
If you are not using some other optimization option, consider using -Og with
-g. With no -O option at all, some compiler passes that collect information
useful for debugging do not run at all, so that -Og may result in a better
debugging experience.
Most optimizations are completely disabled at -O0 or if an -O level is not
set on the command line, even if individual optimization flags are specified.
Similarly, -Og suppresses many optimization passes.
-Og should be the optimization level of choice for the standard
edit-compile-debug cycle, offering a reasonable level of optimization while
maintaining fast compilation and a good debugging experience. It is a better
choice than -O0 for producing debuggable code because some compiler passes
that collect debug information are disabled at -O0.
Like -O0, -Og completely disables a number of optimization passes so that
individual options controlling them have no effect. Otherwise -Og enables
all -O1 optimization flags except for those that may interfere with
debugging:
-fbranch-count-reg
-fdelayed-branch
-fdse
-fif-conversion
-fif-conversion2
-finline-functions-called-once
-fmove-loop-invariants
-fmove-loop-stores
-fssa-phiopt
-ftree-bit-ccp
-ftree-dse
-ftree-pta
-ftree-sra
Note that the flag -0 referred by the documentation is an alias for -01, which is defined by:
-O1 Optimize. Optimizing compilation takes somewhat more time, and a lot
more memory for a large function.
With -O, the compiler tries to reduce code size and execution time, without
performing any optimizations that take a great deal of compilation time.
-O turns on the following optimization flags:
-fauto-inc-dec
-fbranch-count-reg
-fcombine-stack-adjustments
-fcompare-elim
-fcprop-registers
-fdce
-fdefer-pop
-fdelayed-branch
-fdse
-fforward-propagate
-fguess-branch-probability
-fif-conversion
-fif-conversion2
-finline-functions-called-once
-fipa-modref
-fipa-profile
-fipa-pure-const
-fipa-reference
-fipa-reference-addressable
-fmerge-constants
-fmove-loop-invariants
-fmove-loop-stores
-fomit-frame-pointer
-freorder-blocks
-fshrink-wrap
-fshrink-wrap-separate
-fsplit-wide-types
-fssa-backprop
-fssa-phiopt
-ftree-bit-ccp
-ftree-ccp
-ftree-ch
-ftree-coalesce-vars
-ftree-copy-prop
-ftree-dce
-ftree-dominator-opts
-ftree-dse
-ftree-forwprop
-ftree-fre
-ftree-phiprop
-ftree-pta
-ftree-scev-cprop
-ftree-sink
-ftree-slsr
-ftree-sra
-ftree-ter
-funit-at-a-time