warning::debuginfo - varování ohledně
chybějících ladicích informací
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ů.
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.
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