table of contents
WARNING::DEBUGINFO(7stap) | WARNING::DEBUGINFO(7stap) |
JMÉNO¶
warning::debuginfo - varování ohledně chybějících ladicích informací
POPIS¶
Pro mnoho symbolických sondážních operací potřebuje systemtap ladicí informace DWARF generované kompilátorem při použití CFLAGS -g. Obvykle jsou ladicí informace potřeba pro nalezení sond pro funkce, příkazy, nebo kontextové proměnné. Ladicí informace se mohou nacházet buď přímo v binárních souborech, nebo mohou být odděleny do samostatných souborů, které se hledají v závislosti na nastavení proměnné prostředí SYSTEMTAP_DEBUGINFO_PATH.
Ověřte zda jsou pro vaši distribuci dostupné "debuginfo" balíčky s ladicími informacemi. Pokud tyto balíčky k dispozici nemáte, může být nutné programy, které chcete analyzovat, znovu sestavit tak, aby obsahovaly také ladicí informace DWARF.
Systemtap používá knihovnu elfutils ke zpracování ELF/DWARF souborů. Použitá verze elfutils odpovídá číslu za lomítkem ve výstupu příkazu stap-V output:
% stap -V Systemtap translator/driver (version 2.3/0.156, rpm 2.3-1.fc19) Copyright (C) 2005-2014 Red Hat, Inc. and others [...]
Ukazuje, že systemtap byl sestaven s elfutls verze 0.156.
- ladicí informace jádra
- Pro skripty, které analyzují linuxové jádro, může systemtap potřebovat příslušný soubor vmlinux vzniklý při sestavování jádra. Poznamenejme, že zde nejde o zkomprimovaný soubor vmlinuz , na který se odkazuje boot loader, a ze kterého byly ladicí informace odstraněny. Soubor vmlinux je značně větší, než vmlinuz. Pokud sestavujete jádro ručně, ujistěte se, že máte zapnutou volbu CONFIG_DEBUG_INFO=y. Navíc některé linuxové distribuce mohou poskytovat více variant jádra a pro každou variantu samostatný balíček s ladicími informacemi. Příkladem takové varianty je kernel-debug, varianta s matoucím názvem, která má vlastní kernel-debug-debuginfo balíček (což není totéž jako kernel-debuginfo obsahující ladicí informace pro balíček kernel). Program stap-prep může pomoci s instalací správných balíčků.
- ladicí informace pro uživatelské procesy
- Pro SystemTap skripty, které analyzují uživatelské procesy, může systemtap potřebovat příslušné ladicí informace také. Pokud analyzujete ručně sestavený program, použijte pro jeho překlad CFLAGS=-g -O2 .
- minidebuginfo
- Na některých systémech mohou binární soubory obsahovat podmnožinu obvyklých ladicích informací pro sledování funkcí a generovaní výpisů 'backtrace'. Tohle tzv. 'MiniDebugInfo' představuje xz zkomprimovanou ELF sekci .gnu_debugdata. MiniDebugInfo je podporováno elfutils 0.156, nebo novější verze.
- komprimované debuginfo
- Na některých systémech mohou být ladicí informace dostupné v komprimované formě v rámci sekcí .zdebug_*. Elfutils 0.153 a novější verze obsahují podporu podporu pro tyto komprimované ladicí informace.
- nepotřebné ladicí informace
- V některých případech lze skript upravit tak, aby ladicí informace nepotřeboval. Například skript, který používá probe syscall.* lze obvykle přepsat na skript založený na probe nd_syscall.*, non-DWARF sondách, které používají složitější (ale také křehčí) mechanizmus pro přístup k argumentům systémových volání. Další možností je použití zakompilovaných značek typu 'tracepoint', které jsou dostupné v linuxovém jádře, nebo využít značky <sys/sdt.h> pro uživatelské procesy. Ty nejsou založeny na ladicích informacích. Pokud jsou ladicí informace potřebné k vyhodnocení složitějších výrazů typu $var->foo->bar mělo by být možné použít zápis @cast(var,"foo","foo.h")->foo->bar čímž dojde k syntéze ladicích informací z hlavičkových souborů.
AUTOMATIZACE¶
Na některých platformách může systemtap doporučit, které příkazy spustit pro stažení ladicích informací. Také je možné použít přepínač --download-debuginfo flag. Program stap-prep může být schopen potřebné balíčky stáhnout a nainstalovat. Další možností je použít stap-server pro kompilaci na vzdáleném stroji, kde mohou být ladicí informace centralizovány. V tomto případě použijte volbu stap --use-server.
VIZ TÉŽ¶
gcc(1), stap(1), stappaths(7), stap-server(8), stap-prep(1), strip(1), warning::symbols(7stap), error::dwarf(7stap), error::reporting(7stap), error::contextvars(7stap), http://elfutils.org/, http://fedoraproject.org/wiki/Features/MiniDebugInfo