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 .functi‐
              on() , 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í  infor‐
              mace  jsou zdánlivě dostupné, ale ne ve formátu přijatelném pro nainstalovanou kopii elfutils. Na‐
              pří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. Bo‐
              huž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é instru‐
       mentace jako jsou sondážní body typu "tracepoint" pro jádro, nebo značky <sys/sdt.h> pro uživatelské pro‐
       gramy. 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  in‐
       formací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)