Was ist das native Linux-Debugging-Symbolformat?

7

In der GCC-Dokumentation heißt es, dass die -gOption Debugging-Informationen im nativen Format des Betriebssystems (Stabs, COFF, XCOFF oder DWARF 2) erzeugt .

Was ist das native Linux-Debugging-Symbolformat? Wie heißt es?


Update: Ich habe gerade eine 15 Jahre alte Diskussion über die gcc-Mailingliste gefunden , in der gesagt wurde, dass das native Format zu diesem Zeitpunkt Stabs war, und dann überlegten sie, auf DWARF2 umzusteigen. Aber es war vor 15 Jahren ... Irgendwelche Updates? =)

Golem
quelle
Laut der DWARF-Seite auf Wikipedia folgte "Linux diesem Beispiel, und DWARF-2 wurde erst Ende der neunziger Jahre zum Standard." . Ich würde jedoch gerne eine maßgeblichere Quelle sehen.
Digitales Trauma

Antworten:

6

Unter Linux ist die Standardeinstellung jetzt Dwarf 2 und / oder 4. Um dies zu sehen, führen Sie readelf --debug-dump=infoeine Binärdatei aus, die Debug-Symbole (oder entfernte Symbole) enthält. Wenn Sie beispielsweise auf Fedora glibc-debuginfoinstalliert sind, erhalten Sie beim Ausführen readelf --debug-dump=info /usr/lib/debug/bin/gencat.debugso etwas wie

 <1><ea>: Abbrev Number: 0
  Compilation Unit @ offset 0xeb:
   Length:        0x5c (32-bit)
   Version:       2
   Abbrev Offset: 0x52
   Pointer Size:  8
 <0><f6>: Abbrev Number: 1 (DW_TAG_compile_unit)
    <f7>   DW_AT_stmt_list   : 0x83
    <fb>   DW_AT_ranges      : 0x0
    <ff>   DW_AT_name        : ../sysdeps/x86_64/crti.S
    <118>   DW_AT_comp_dir    : /usr/src/debug////////glibc-2.21/csu
    <13d>   DW_AT_producer    : GNU AS 2.25
    <149>   DW_AT_language    : 32769   (MIPS assembler)

Dies ist eine Reihe von Informationen zu Dwarf 2 ( Version:Versionsinformationen finden Sie in der Kopfzeile; dieselbe Binärdatei enthält Abschnitte zu Dwarf 2 und Dwarf 4).

Stephen Kitt
quelle
Können Sie bitte näher darauf eingehen, dass " dieselbe Binärdatei die Abschnitte Dwarf 2 und Dwarf 4 enthält" ? Ansonsten scheinen Sie Recht zu haben, Linux verwendet DWARF. Die neueste Dokumentation für gcc-5.2.0 besagt auch, dass bei Verwendung der -gdwarfOption die Standard-DWARF-Version 4 ist. Der gleiche Abschnitt der Dokumentation für gcc-4.7.4 (ich habe hier gcc-4.7.2) besagt jedoch, dass der Standardwert ist DWARF Version 2.
Golem
So scheint es, dass unter Linux mit gcc-4.7.2: gcc -g== gcc -gdwarf==gcc -gdwarf-2
Golem
@golem Auf dem Fedora-System, das ich hier habe, listet der Befehl, den ich gegeben habe, Zwergenabschnitte mit beiden Versionen 2 und 4 in derselben Binärdatei auf, daher mein Kommentar. Die Binärdatei wurde mit gcc 5.1.1 erstellt; Vielleicht enthält das Bauen mit Dwarf 4 Abschnitte der Version 2, um die Abwärtskompatibilität zu gewährleisten, aber das ist nur eine Vermutung, ich müsste weiter nachforschen.
Stephen Kitt
1
Seit gcc 4.8 gcc -gverwendet Dwarf 4: gcc.gnu.org/gcc-4.8/changes.html
npostavs