私はSystemTapチュートリアルに従っており、セクション2.3 「トレース。演習」の演習1を実行しようとしています。この-L
オプションは機能しないようです。私はこのスクリプトを手に入れました:
probe kernel.function("*nit*"){}
端末に入力します:
$ stap -L PROBE t.stp
そして何も起こりません。
私はSystemTapチュートリアルに従っており、セクション2.3 「トレース。演習」の演習1を実行しようとしています。この-L
オプションは機能しないようです。私はこのスクリプトを手に入れました:
probe kernel.function("*nit*"){}
端末に入力します:
$ stap -L PROBE t.stp
そして何も起こりません。
$ stap -L 'kernel.function("blahblah")'
Systemtapは素晴らしいですが、ドキュメントは貧弱です。
From man stap
(systemtap*-1.7-2.fc15.x86_64
RPMがインストールされている場合)
stap [ OPTIONS ] -l PROBE [ ARGUMENTS ]
stap [ OPTIONS ] -L PROBE [ ARGUMENTS ]
-l PROBE
Instead of running a probe script, just list all available probe
points matching the given single probe point. The pattern may
include wildcards and aliases, but not comma-separated multiple
probe points. The process result code will indicate failure if
there are no matches.
-L PROBE
Similar to "-l", but list probe points and script-level local
variables.
「プローブポイント」とは、「kernel.function( "blahblah")」などを指します。前にキーワード「probe」はなく、後にプローブハンドラーもありません。
次の例を試すことができます。
すべてのカーネル関数のリストを取得します。
$ stap -l'kernel.function( "*")' | 選別
kernel.function( "vfs_read @ / build / linux-lts-xenial-Hu9lgy / linux-lts-xenial-4.4.0 / fs / read_write.c:440")[....]
カーネル関数と引数(ローカル変数)を取得するには
$ stap -L'kernel.function( "*")' | grep vfs_read
kernel.function( "vfs_read @ / build / linux-lts-xenial-Hu9lgy / linux-lts-xenial-4.4.0 / fs / read_write.c:440")$ file:struct file * $ buf:char * $ count :size_t $ pos:loff_t *
[....]
stap -L kernel.function("*nit*") | sort
私が言ったことよりも多くの学んだ人々に追加するだけです:
stap -L 'module("module-name-here").function("*")'
通常のカーネルプローブの場合:
stap -L 'kernel.function("*")'
これが将来誰か他の人に役立つことを願っています!