Lua Memo

指定された関数にフックを設定する

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 は正しくないデータを返す。)

sample

フックの使用例

-- 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
--]]

参考