error::pass2 - chyby procesní fáze 2
Chyby, které se mohou vyskytnout během procesní fáze
2 mají řadu příčin. Mezi ty
nejobvyklejší patří:
- chybějící ladicí informace
- Skript potřebuje ladicí informace pro
lokalizaci sondážního bodu, ale ladicí
informace nejsou doustupné. Více podrobností
naleznete v manuálových stránkách
error::dwarf(7stap) a warning::debuginfo(7stap).
- nedostupná třída
sondážních bodů
- Některé sondážní body
jsou specifické pro verzi, architekturu, nebo konfiguraci.
Například sondy pro uživatelské procesy
process.* mohou vyžadovat jadernou funkcionalitu
"utrace", nebo "uprobes".
- nedostupné sondážní body
- Některé sondážní body
mohou být nedostupné i když jejich
třída dostupná je. Například
kprobe.function("foobar") může selhat pokud
funkce foobar byla z jádra odstraněna. Pro
některé symboly mohou chybět ladicí informace.
Tím obvykle trpí sondážní body
.function nebo .statement . Přesvědčte
se o dostupnosti ladicích informací. Vyzkoušejte
program stap-prep který umí nainstalovat
chybějící závislosti. Použijte
zástupný symbol jako např. stap -l
'kprobe.function("*foo*")' abyste zjistili dostupné
varianty sondážního bodu. Použijte
modifikátory ! nebo ? pro vyznačení
volitelnosti, či dostatečnosti daného
sondážního bodu, aby funkční
části skriptu mohly pokračovat v činnosti.
- překlepy
- V specifikaci sondážních bodů
mohou být překlepy, jako např. ("sycsall"
vs. "syscall"). Zástupné symboly nemusejí
být expandovatelné ani na jeden validní
sondážní bod. Ověřte platnost/existenci
sondážních bodů pomocí stap -l
FILTR. Další běžnou chybou je
použití chybného operátoru dereference:
. namísto správného ->.
Příklad správného použití je
$foo->bar->baz ačkoliv v C by správný
zápis byl foo->bar.baz.
- nedostupné kontextové
proměnné
- Systemtap skripty se často pokoušejí
přistoupit ke kontextovým proměnným v
analyzovaném kódu prostřednictvím syntaxe
$variable . Dostupnost takových proměnných
může záviset na verzi kompilátoru,
zvolené optimalizaci, architektuře atd. Použijte
stap -L FILTR k vypsání dostupných
kontextových proměnných pro danou sondu.
Použijte @defined() pro ověření
dostupnosti proměnné v rámci skriptu. Zvažte
použití volby stap --skip-badvars
čímž se nedostupné kontextové
proměnné tiše přeskočí, a jejich
hodnota se automaticky nastaví na 0. Experimentujte s volbou
--prologue-searching.
- nekonzistentní cache
- Občas může cache systemtap modulu
($HOME/.systemtap/cache) obsahovat zastaralé informace.
Pomocí přepínače stap --poison-cache
... lze obsah cache zneplatnit. Poznámka: Toto by se
nemělo stát, jde o chybu. Prosím, nahlaste ji.
Upovídanost procesní fáze 2 lze zvýšit
pomocí
--vp 02.
stap(1),
stap-prep(1),
stapprobes(3stap),
probe::*(3stap),
error::dwarf(7stap),
error::inode-uprobes(7stap),
warning::debuginfo(7stap),
error::reporting(7stap)