-g weist den Compiler an, Symboltabelleninformationen in der ausführbaren Datei zu speichern. Dazu gehören unter anderem:
- Symbolnamen
- Geben Sie info für Symbole ein
- Dateien und Zeilennummern, aus denen die Symbole stammen
Debugger verwenden diese Informationen, um aussagekräftige Namen für Symbole auszugeben und Anweisungen bestimmten Zeilen in der Quelle zuzuordnen.
Bei einigen Compilern werden durch die Angabe von -g bestimmte Optimierungen deaktiviert. Beispielsweise setzt icc die Standardoptimierungsstufe mit -g auf -O0, sofern Sie nicht ausdrücklich -O [123] angeben. Auch wenn Sie -O [123] angeben, werden Optimierungen, die die Stapelverfolgung verhindern, weiterhin deaktiviert (z. B. Entfernen von Frame-Zeigern von Stack-Frames. Dies hat nur einen geringen Einfluss auf die Leistung).
Bei einigen Compilern deaktiviert -g Optimierungen, die verwirren können, woher Symbole stammen (Neuanordnung von Anweisungen, Abrollen von Schleifen, Inlining usw.). Wenn Sie mit der Optimierung debuggen möchten, können Sie -g3 mit gcc verwenden, um einige davon zu umgehen. Zusätzliche Debug-Informationen zu Makros, Erweiterungen und Funktionen, die möglicherweise eingebunden wurden, werden hinzugefügt. Dies kann es Debuggern und Leistungstools ermöglichen, optimierten Code der ursprünglichen Quelle zuzuordnen, aber es ist die beste Anstrengung. Einige Optimierungen entstellen den Code wirklich.
Weitere Informationen finden Sie in DWARF , dem Debugging-Format, das ursprünglich für ELF (das Binärformat für Linux und andere Betriebssysteme) entwickelt wurde.