第5章 SystemTap のエラーを理解する
5.1. 解析エラーとセマンティックエラー
スクリプトに文法的なエラーまたは誤字や脱字のエラーが含まれています。SystemTap は間違ったコンストラクトのタイプを検出しプローブのコンテキストを表示します。
probe vfs.read probe vfs.write
probe キーワードには別の値を期待していたことを示すエラーメッセージが表示されます。
parse error: expected one of '. , ( ? ! { = +='
saw: keyword at perror.stp:2:1
1 parse error(s).
スクリプトには危険な埋め込み C コードが含まれています (%{ %} で囲まれたコードブロック)。SystemTap では目的にあった tapsets がない場合にはスクリプトに C コードを埋め込むことができるため便利ですが、埋め込みの C コンストラクトは安全ではありません。スクリプトにこのような構造を検出すると SystemTap はこのエラーで警告を発します。
stapdev グループのメンバーである (または root 特権がある) 場合には、-g オプションを使って guru モードでスクリプトを実行します。
stap -g script
スクリプト内の ident 関数で間違ったタイプを使用しています (%s または %d)。このエラーを 例5.1「error-variable.stp」 に示します。execname() 関数が文字列を返すため書式指定子は %d ではなく %s にしてください。
例5.1 error-variable.stp
probe syscall.open
{
printf ("%d(%d) open\n", execname(), pid())
}
識別子 (変数など) が使用されているがタイプ (整数または文字列) を特定できません。たとえば、printf ステートメントに変数を使用しているのにスクリプトでは変数に値を割り当てていない場合などにこのエラーが発生します。
SystemTap ではアレイ内の場所や変数に値を割り当てることはできません。割り当ての目的地が有効な目的地になっていません。次のようなコードを使用するとこのエラーが発生することになります。
probe begin { printf("x") = 1 }
スクリプト内の関数コールまたはアレイインデックス式が無効な数の引数/パラメーターを使用しました。SystemTap では、arity (アリティ) はアレイのインデックス数か関数へのパラメーター数を見ることができます。
アレイをグローバル変数と宣言せずに、スクリプトがアレイ演算を使用しました (グローバル変数は、SystemTap スクリプトでの使用後に宣言されることができます)。アレイが一貫性のないアリティと使用されると、同様のメッセージが表示されます。
var アレイがアクティブな foreach ループ内で修正されています (割り当てられるまたは削除される)。このエラーは、スクリプト内の演算が foreach ループ内で関数コールを実行しても表示されます。
SystemTap は、イベントまたは SystemTap 関数 pnt が参照しているものを理解できませんでした。これは通常、SystemTap が tapset ライブラリー内で pnt にマッチするものを見つけられなかったことを意味します。ここでの N は、エラーの行とコラムを指します。
pnt イベントとハンドラー関数が各種の理由で解決できませんでした。このエラーは、スクリプトに kernel.function("name") イベントが含まれ、name が存在しない場合に発生します。このエラーはスクリプトに無効なカーネルファイル名やソース行数が含まれていることを意味する場合もあります。
スクリプトのハンドラーはターゲット変数を参照しますが、変数の値が解決できませんでした。このエラーは、ハンドラーがターゲット変数を参照した際にその変数がコンテキスト内で無効であることも意味します。これは、生成されたコードのコンパイラー最適化の結果である可能性もあります。
デバッグ情報の処理に問題がありました。ほとんどの場合、このエラーは kernel-debuginfo パッケージのインストールにより発生します。インストールされた kernel-debuginfo パッケージ自体に一貫性もしくは正確性の問題がある可能性があります。
SystemTap は適切な kernel-debuginfo を見つけることができませんでした。

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.