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 0x400512nennt Funktion, Datei und Zeile - Mit
-Cerscheinen C++-Symbole wieMeinClass::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).