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