「SystemTap」の版間の差分
提供: Wikinote
細 |
細 |
||
| 行16: | 行16: | ||
probe kernel.function("sys_*") { | probe kernel.function("sys_*") { | ||
| − | printf("%s[%d] called %s", execname(), pid(), | + | printf("%s[%d] called %s()\n", execname(), pid(), probefunc()) |
} | } | ||
| 行32: | 行32: | ||
* probefunc() — probe した関数名 | * probefunc() — probe した関数名 | ||
* probemod() — probe したモジュール名 | * probemod() — probe したモジュール名 | ||
| + | |||
| + | == 注意事項 == | ||
| + | * <code>probe kernel.function("*")</code> (すべてのカーネル関数をフック) をやってはいけない。この中で何か出力しようものなら、あっという間にシステムがストールしてしまう (実証済み…)。何も出力しなければ or screen 上で実行しなければ問題ないのかもしれないが、もう怖くてできない。。 | ||
2009年7月28日 (火) 23:29時点における版
ついに伝家の宝刀 (でも諸刃の剣) を抜く時が来たようだ…。
参考 URL
- SystemTap 公式ページ。Documentation と Wiki を見ればとりあえず事足りる。
覚え書き
基本形
文法は、awk に似ている。begin/end はオプション。
#!/usr/bin/stap -v
probe begin {
...
}
probe kernel.function("sys_*") {
printf("%s[%d] called %s()\n", execname(), pid(), probefunc())
}
probe end {
...
}
組み込み関数
使えそうなものを挙げておく。詳細やすべてのリストは man stapfuncs を参照のこと。
- cpu() — 現在の CPU 番号
- execname() — 現在のプロセス名
- gettimeofday_s() — UNIX epoch からの経過秒数
- ctime() — ctime(gettimeofday_s()) で現在の時刻を表示
- pp() — probe point の情報
- probefunc() — probe した関数名
- probemod() — probe したモジュール名
注意事項
-
probe kernel.function("*")(すべてのカーネル関数をフック) をやってはいけない。この中で何か出力しようものなら、あっという間にシステムがストールしてしまう (実証済み…)。何も出力しなければ or screen 上で実行しなければ問題ないのかもしれないが、もう怖くてできない。。