noble (7) error::dwarf.7stap.gz

Provided by: systemtap-doc_5.0-2ubuntu1_amd64 bug

JMÉNO

       error::dwarf - chyby v souvislosti s ladicími informacemi formátu DWARF

POPIS

       Systemtap  někdy  spoléhá  na  ladicí  informace  k  lokalizaci umístění sond, nebo k lokalizaci umístění
       zkoumaných (či instrumentovaných) proměnných, stejně  jako  to  dělá  symbolický  debugger.  Tyto  ladicí
       informace  lze  získat analýzou zdrojového kódu a překladač je umí uchovávat v rámci formátu DWARF. Pokud
       systemtap ladicí informace potřebuje, ale překladač je neuchoval, dojde při zpracování  skriptu  k  chybě
       během procesní fáze 2.

       Obvyklé příčiny tohoto typu chyb:

       verze překladače
              Překladače  GCC  4.5  a  starší  generovaly  ladicí  informace  omezené  kvality.  Vývojářům  bylo
              doporučováno sestavovat s použitím -O0 -g, tedy s vypnutím optimalizace. GCC 4.5 přineslo  koncept
              "variable-tracking  assignments",  což  umožňuje  generovat kvalitní ladicí informace i s použitím
              optimalizací -O2 -g. Není to dokonalé, ale jde o  značné  zlepšení.  Poznamenejme,  že  chyba  GCC
              PR51358  způsobuje,  že ladicí informace získané při -O0 -g jsou ve skutečnosti horší kvality, než
              ladicí informace vygenerované s -O2 -g.

              Dalším souvisejícím problémem je kvalita ladicích informací  pro  oblast  prologu  (PR15123),  kdy
              program  sestavený  s  CFLAGS=-mfentry (obvykle jádro, kvůli ftrace) poskytuje nedostatek přesných
              ladicích informací v souvislosti se vstupem do funkce. To se týká zejména GCC verze 4.8 a  starší.
              Pokud    je    to    možné,   kompilujte   s   -grecord-gcc-switches   a   spusťte   systemtap   s
              $PR15123_ASSUME_MFENTRY=1.

       "inline" funkce
              Dokonce i moderní GCC má problémy s parametry "inline" funkcí. Může být  nutné  upravit  systemtap
              skript  a  vložit  sondy  na  mírně  odlišná  místa.  Zkuste  použít  sondu .statement() , namísto
              .function() , a případně ji posuňte o několik řádek níže směrem  do  těla  "inline"  funkce.  Nebo
              zkuste  vložit  sondu  do  místa  volání  "inline"  funkce.  Také  je  možno  využít konstrukce if
              @defined($var) { ... } k ověření dostupnosti kontextové proměnné před jejím použitím.

       záměna pořadí instrukcí
              Optimalizovaný kód často zahrnuje smíchání instrukcí z různých zdrojů. V takovém případě může  být
              nemožné  umístit  sondu  na  potřebné místo. To se týká zejména sond .statement vkládaných na dané
              číslo řádku. Systemtap může doporučit přesunutí sondy na přilehlý řádek, ale ani to nemusí stačit.
              Zvažte zavedení sondy na místo určené zástupným symbolem, nebo rozsahem řádků.

       konfigurace elfutils
              Systemtap  používá  pro  zpracování  ladicích  informací  knihovnu  elfutils.  Je možné, že ladicí
              informace jsou zdánlivě dostupné, ale ne ve formátu přijatelném pro nainstalovanou kopii elfutils.
              Například lokální GCC může produkovat komprimované ladicí informace (.zdebug_* ELF sekce, nebo .xz
              soubory), zatímco nainstalovaná kopie elfutils  nemá  zapnuté  příslušné  dekompresní  schopnosti.
              Bohužel  není  snadné odhalit, zda toto je skutečné jádro problému který se snažíme vyřešit. Pokud
              si sestavujete vlastní elfutils, ujistěte se, že všechny dekompresní knihovny/hlavičky jsou v době
              překladu dostupné.

       konfigurace ladicích informací
              Některé  nástroje  mohou  generovat ladicí informace v podobě nepoužitelné pro systemtap. Příčinou
              může být například jaderná volba CONFIG_DEBUG_INFO_SPLIT (.dwo soubory). Dobrých výsledků  se  lze
              dosáhnout  při  použití  obvyklého  ELF/DWARF  formátu  (případně  oddělených  ladicích  informací
              (stripped debuginfo) jak je obvyklé v distribuci Fedora).

ALTERNATIVY

       Pro  snížení  závislosti  na   ELF/DWARF  ladicích  informacích  zvažte  použití  staticky  zakompilované
       instrumentace  jako  jsou  sondážní  body  typu  "tracepoint"  pro  jádro,  nebo  značky  <sys/sdt.h> pro
       uživatelské programy. Jde o řešení s relativně nízkými náklady na  systémové  zdroje  (v  případě  sdt.h,
       jedna  NOP  instrukce  na  značku),  přičemž  dostupnost  parametrů/dat  je téměř garantována. To vše bez
       závislosti na ladicích informacích.

VIZ TÉŽ

       stap(1),
       http://dwarfstd.org/,
       http://sourceware.org/systemtap/wiki/TipContextVariables,
       http://gcc.gnu.org/wiki/Var_Tracking_Assignments,
       warning::debuginfo(7stap),
       error::reporting(7stap)

CHYBY

       Použijte    projektovou    bugzillu,     nebo     mailing     list.     http://sourceware.org/systemtap/,
       <systemtap@sourceware.org>.

       error::reporting(7stap), https://sourceware.org/systemtap/wiki/HowToReportBugs

                                                                                             ERROR::DWARF(7stap)