addr2line aus den GNU Binutils übersetzt Speicheradressen aus einem Programm in Dateiname und Zeilennummer des zugehörigen Quellcodes. Dazu nutzt es die DWARF-Debug-Informationen, die der Compiler beim Übersetzen mit -g eingebettet hat.

Die wichtigsten Optionen

addr2line -e programm 0x400512        # Adresse in Datei:Zeile auflösen
addr2line -f -e programm 0x400512     # zusätzlich Funktionsname
addr2line -C -e programm 0x400512     # C++-Namen entmischen
addr2line -p -f -e programm 0x400512  # kompakte, lesbare Ausgabe
addr2line -i -f -e programm 0x400512  # auch Inline-Funktionen zeigen

Praxis-Beispiele

  • Ein Crash-Log meldet Segfault at 0x400512: addr2line -f -e meinprogramm 0x400512 nennt Funktion, Datei und Zeile
  • Mit -C erscheinen C++-Symbole wie MeinClass::meineMethode() statt der entmischten Form
  • Adressen aus Prozess-Backtraces oder Coredumps lassen sich so direkt in Quellcode-Stellen verwandeln
  • Fehlt die Debug-Info (gestripptes Binary), liefert addr2line nur ??:0

Einordnung

addr2line ergänzt den Debug-Workflow von gdb-Befehle: Während gdb ein Programm interaktiv stoppt, arbeitet addr2line offline auf bereits protokollierten Adressen. Gemeinsam mit Symboltabelle und objdump-Befehle gehört es zur Standard-Ausrüstung beim Analysieren von Abstürzen.

Verwandte Grundlagen: nm-Befehle (Symbole), ld-Befehle (Linken).