40.2. SystemTap での関数呼び出しのトレース
para-callgraph.stp SystemTap スクリプトを使用して、関数呼び出しと関数戻りを追跡できます。
前提条件
- SystemTap のインストール の説明に従って、SystemTap をインストールしている。
手順
- para-callgraph.stp スクリプトを実行します。
# stap --example para-callgraph.stp 'argument1' 'argument2'
para-callgraph.stp スクリプトは、コマンドライン引数を 2 つ取ります。
- その開始または終了が追跡対象となっている関数の名前。
- オプションのトリガー関数。スレッド単位でのトレースを有効または無効にします。トリガー関数が終了するまで、各スレッドでのトレースが継続されます。
以下の例を考慮してください。
# stap -wv --example para-callgraph.stp 'kernel.function("*@fs/proc.c*")' 'kernel.function("vfs_read")' -c "cat /proc/sys/vm/* || true"
ここでは、以下のようになります。
- -w : 警告を表示しません。
- -v : 起動したカーネルの出力を表示します。
-
-c コマンド : コマンドの実行中に関数呼び出しを数えるように SystemTap に指示します (この例では
/bin/true
)。
この出力は、以下のようになります。
[...] 267 gnome-terminal(2921): <-do_sync_read return=0xfffffffffffffff5 269 gnome-terminal(2921):<-vfs_read return=0xfffffffffffffff5 0 gnome-terminal(2921):->fput file=0xffff880111eebbc0 2 gnome-terminal(2921):<-fput 0 gnome-terminal(2921):->fget_light fd=0x3 fput_needed=0xffff88010544df54 3 gnome-terminal(2921):<-fget_light return=0xffff8801116ce980 0 gnome-terminal(2921):->vfs_read file=0xffff8801116ce980 buf=0xc86504 count=0x1000 pos=0xffff88010544df48 4 gnome-terminal(2921): ->rw_verify_area read_write=0x0 file=0xffff8801116ce980 ppos=0xffff88010544df48 count=0x1000 7 gnome-terminal(2921): <-rw_verify_area return=0x1000 12 gnome-terminal(2921): ->do_sync_read filp=0xffff8801116ce980 buf=0xc86504 len=0x1000 ppos=0xffff88010544df48 15 gnome-terminal(2921): <-do_sync_read return=0xfffffffffffffff5 18 gnome-terminal(2921):<-vfs_read return=0xfffffffffffffff5 0 gnome-terminal(2921):->fput file=0xffff8801116ce980