Das kompilierte Programm sollte irgendwo gespeichert werden, für die Debugger (GDB hier), um es zu untersuchen und zu folgen.
Dies wird technisch als "Debugging-Datenformat" bezeichnet.
Einige universaslly akzeptiert Debug-Datenformate sind (es gibt einige weitere):
COFF - Common Object File Format - auf UNIX-ähnlichen Systemen.
PE/COFF - Portable Executable - ziemlich berühmt auf Windows, in der Regel verwendet Dotnet es.
DWARF - beliebt unter UNIX wie Systeme.
etc ..
Die GDB Optionen, die Sie in Ihrer Frage gestellt werden, um zu erzeugen, diese Debug-Datenformaten zusammen.
Basierend auf Dokumentation der funktionale Unterschied ist: Option "g" bietet die Debugging-Daten im systemeigenen Format. Option "-ggdb" ist Bit reich und teuer. stellt die Debugging-Daten im ausdrucksstärksten verfügbaren Format zur Verfügung.