「SystemTap」の版間の差分

提供: Wikinote
移動: 案内検索
行16: 行16:
 
   
 
   
 
  probe kernel.function("sys_*") {
 
  probe kernel.function("sys_*") {
     printf("%s[%d] called %s", execname(), pid(), pp())
+
     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 上で実行しなければ問題ないのかもしれないが、もう怖くてできない。。