debug.sethook (hook, mask [, count])
指定された関数にフックを設定する。 文字列 mask と数値 count は、いつフックが呼ばれるかを記述する。 文字列 mask には以下の文字を指定する
mask | 意味 |
---|---|
c | フックはLuaが関数を呼ぶたびに呼ばれる。 |
r | フックはLuaが関数から戻るたびに呼ばれる。 |
l | フックはLuaがコードの新しい行に入るたびに呼ばれる。 |
count がゼロでなければ、フックは count 命令が実行されるたびに、その直後に呼ばれる。
引数なしで呼ぶとフックは無効になる。
フックが呼ばれたとき、最初の引数はフックを起動したイベントを示す以下のいずれかの文字列である。 "call", "return" "tail return", "line", "count"。
lineイベントの場合、フックは二番目の引数に新しい行番号が得られる。
"tail return" を除いて、 フックの内部でレベル2の getinfo を呼べば、実行中の関数に関する情報をもっと得られる (レベル0は getinfo 関数自身で、レベル1はフック関数である)。( "tail return" はLuaが復帰をシミュレートしているだけであり、 getinfo は正しくないデータを返す。)
フックの使用例
-- set hook function hook_func(p) local fname = debug.getinfo(2).name print("[hook]"..p..":"..fname) end debug.sethook(hook_func, "c") -- call function function hoge1(a,b) return a,b end function hoge2(a,b) return a,b end hoge1(3,5) hoge2(1,2) --[[ 実行結果 [hook]call:hoge1 [hook]call:hoge2 --]]