GCC -g vs -g3 GDB-Flag: Was ist der Unterschied?

Lesezeit: 3 Minuten

Wenn ich C-Quellcode entweder mit gcc oder Clang kompiliere, verwende ich immer die -g Flag zum Generieren von Debugging-Informationen für gdb.

gcc -g -o helloworld helloworld.c

Mir ist aufgefallen, dass einige Leute empfehlen -g3 stattdessen. Was ist der Unterschied zwischen der -g und -g3 Flaggen? Gibt es auch einen Unterschied zw -g und -ggdb?

  • Ich bin hierher gekommen, weil ich das Makefile von jemand anderem verwende und die Dokumentation ein Monster ist, um damit zu beginnen. Gute Frage zu StackOverflow, um eine einfache Antwort von Google zu finden.

    – GreenAsJade

    23. September 2015 um 12:11 Uhr

  • Eine überwältigende Anzahl von Fragen zu SO werden von der Dokumentation abgedeckt, solange Sie bereit sind, weit genug zu graben. Das ist kein triftiger Grund, eine Frage abzulehnen.

    – BeeOnRope

    3. Oktober 2018 um 22:39 Uhr

Benutzeravatar von MByD
MByD

Von dem Dokumente:

-g

Produzieren Sie Debugging-Informationen im nativen Format des Betriebssystems (stabs, COFF, XCOFF oder DWARF 2). GDB kann mit diesen Debugging-Informationen arbeiten. Auf den meisten Systemen, die das Stabs-Format verwenden, ermöglicht -g die Verwendung zusätzlicher Debugging-Informationen, die nur GDB verwenden kann; Diese zusätzlichen Informationen verbessern das Debuggen in GDB, führen aber wahrscheinlich dazu, dass andere Debugger abstürzen oder sich weigern, das Programm zu lesen. Wenn Sie sicher steuern möchten, ob die zusätzlichen Informationen generiert werden sollen, verwenden Sie -gstabs+, -gstabs, -gxcoff+, -gxcoff oder -gvms (siehe unten).


-ggdb

Erzeugt Debugging-Informationen zur Verwendung durch GDB. Dies bedeutet, das ausdrucksstärkste verfügbare Format zu verwenden (DWARF 2, Stabs oder das native Format, falls keines von beiden unterstützt wird), einschließlich GDB-Erweiterungen, sofern möglich.


-gvmslevel

Fordern Sie Debugging-Informationen an und verwenden Sie auch level, um anzugeben, wie viele Informationen. Die Standardstufe ist 2. Stufe 0 erzeugt überhaupt keine Debug-Informationen. Somit negiert -g0 -g.

….

Ebene 3 enthält zusätzliche Informationen, wie z. B. alle im Programm vorhandenen Makrodefinitionen. Einige Debugger unterstützen die Makroerweiterung, wenn Sie -g3 verwenden.

  • Kann noch erklärt werden, was der Unterschied zwischen beispielsweise “ausdrucksstärkstem Format” und “zusätzlichen Informationen” ist? Sind diese Parameter komplementär? Viele von ihnen erwähnen GDB … Danke!

    – Rogerpack

    25. August 2015 um 23:26 Uhr

Benutzeravatar von U007D
U007D

tl;dr: Um Ihre konkrete Frage zu beantworten, -g3 “enthält zusätzliche Informationen wie Makrodefinitionen … Einige Debugger unterstützen die Makroerweiterung, wenn Sie verwenden -g3“, während -g enthält diese zusätzlichen Informationen nicht.

Die breitere Antwort lautet, dass gcc vier Ebenen von Debug-Informationen unterstützt, von -g0 (Debug-Informationen deaktiviert) durch -g3 (maximale Debug-Informationen).

Angabe -g ist äquivalent zu -g2. Kurioserweise die gcc-Dokumente sagen wenig darüber, welche Informationen -g/-g2 schließt ein oder aus:

Fordern Sie Debugging-Informationen an und verwenden Sie auch level, um anzugeben, wie viele Informationen. Die Standardstufe ist 2. Stufe 0 erzeugt überhaupt keine Debug-Informationen. Somit negiert -g0 -g.

Stufe 1 erzeugt minimale Informationen, die ausreichen, um Rückverfolgungen in Teilen des Programms zu erstellen, die Sie nicht debuggen möchten. Dazu gehören Beschreibungen von Funktionen und externen Variablen sowie Zeilennummerntabellen, aber keine Informationen über lokale Variablen.

Ebene 3 enthält zusätzliche Informationen, wie z. B. alle im Programm vorhandenen Makrodefinitionen. Einige Debugger unterstützen die Makroerweiterung, wenn Sie -g3 verwenden.

1423690cookie-checkGCC -g vs -g3 GDB-Flag: Was ist der Unterschied?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy