Скомпилированную программу следует хранить в некоторой части, где для отладчиков (GDB здесь) нужно заглядывать в нее и следовать.
Это технически называется «Отладочный формат данных».
Некоторых universaslly принятых форматы отладка данные являются (есть еще несколько):
COFF - Common Object File Format - на UNIX подобных систем.
PE/COFF - Portable Executable - довольно известный в окнах, обычно это использует dotnet.
DWARF - популярный в UNIX подобных системах.
и т.д ..
Варианта GDB Вы запрашивали в вашем вопросе связана с созданием этих форматов отладка данных.
На основе документации функциональная разница: Опция «g» предоставляет данные отладки в собственном формате конкретной системы. вариант «-ggdb» бит богат и дорог. предоставляет отладочные данные в наиболее выразительном формате.