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.