addr2line(1)

Från Wiki.linux.se -Linux wikipedia på Svenska.
Hoppa till navigering Hoppa till sök

addr2line

addr2line konverterar adresser eller symbol+offset till filnamn och radnummer.

Beskrivning

addr2line översätter adresser eller symbol+offset i en körbar fil till motsvarande källfil och radnummer med hjälp av debuginformation.

Verktyget kan användas på två sätt:

  • adresser eller symbol+offset anges direkt på kommandoraden
  • adresser eller symbol+offset läses från standard input

Den körbara fil eller objektfil som ska användas anges med -e. Standardvärdet är a.out.

För relokerbara objekt kan en specifik sektion anges med -j.

Standardformatet för utmatning är:

FILNAMN:RADNUMMER

Om filnamn eller funktionsnamn inte kan bestämmas skrivs ??. Om radnumret inte kan bestämmas skrivs 0.

Användning

Exempel med adress på kommandoraden:

addr2line -e program 0x401234

Exempel med flera adresser:

addr2line -e program 0x401234 0x401250 0x401300

Exempel där adresser läses från standard input:

echo 0x401234 | addr2line -e program

Det går också att använda symbol+offset i stället för rå adress.

Viktiga flaggor

  • -a, --addresses — visa indataadressen före resultatet
  • -b BFDNAME, --target=BFDNAME — ange objektformat
  • -C, --demangle[=stil] — avkoda manglade symbolnamn till läsbara namn, till exempel för C++
  • -e FIL, --exe=FIL — ange körbar fil eller objektfil
  • -f, --functions — visa funktionsnamn
  • -s, --basenames — visa bara basnamnet på filerna
  • -i, --inlines — visa även information om inlinade funktioner
  • -p, --pretty-print — skriv ut resultatet i mer människoläsbart format, en rad per adress
  • -j, --section — tolka värden som offset relativt en viss sektion
  • -r, --no-recurse-limit — stäng av rekursionsgräns vid demangling
  • -R, --recurse-limit — slå på rekursionsgräns vid demangling

Utmatning

Varje indataadress ger normalt en rad med:

FILNAMN:RADNUMMER

Om -a används visas först adressen.

Om -f används visas även funktionsnamnet.

Om -i används och adressen ligger i kod som blivit inlinad av kompilatorn, skrivs ytterligare rader ut för varje omslutande inlinad funktion.

Om -p används skrivs varje träff på en mer sammanhängande rad med adress, funktion, fil och radnummer.

Inlinade funktioner

Med -i kan addr2line visa hela kedjan av inlinade anrop.

Exempel: om main har inlinat callee1, och callee1 har inlinat callee2, och adressen tillhör callee2, så visas även information för callee1 och main.

Demangling

Med -C kan symbolnamn från exempelvis C++ göras mer läsbara. Detta tar bort låg-nivåmangling så att funktionsnamnen blir lättare att förstå.

Det finns också stöd för olika demangling-stilar beroende på kompilator.

Rekursionsgräns

Vid demangling kan mycket komplexa symbolnamn orsaka väldigt djup rekursion. Därför finns en standardgräns på 2048 nivåer.

  • -R aktiverar denna gräns
  • -r stänger av den

Att stänga av gränsen kan behövas för mycket komplicerade namn, men kan också orsaka stackutrymning.

Exempel

Visa adress tillsammans med funktion:

addr2line -a -f -e program 0x401234

Visa bara filernas basnamn:

addr2line -s -e program 0x401234

Visa snyggare, mer läsbar utmatning:

addr2line -p -f -C -e program 0x401234

Visa även inlinade anrop:

addr2line -i -f -C -e program 0x401234

Se även

  • binutils Info-dokumentation
  • backtrace(3)

Sidslut

Orginalhemsidan på Engelska https://man7.org/linux/man-pages/man1/addr2line.1.html Det här är en maskinöversättning av Linux man sidor till svenska. Om du hittar fel är vi tacksamma om du rapporterar dem via formuläret som finns på https://www.linux.se/kontaka-linux-se/

Tack till Datorservice som har sponsrat Linux.se med webbhotell.