この初版はLua 5.0用に書かれました。依然として後続のバージョンで関連性が高いものの、一部違いがあります。
第4版はLua 5.3を対象とし、Amazonなどの書店から入手可能です。
本の購入により、Luaプロジェクトの支援にもつながります。
![]() |
Luaでプログラムする | ![]() |
第3章 標準ライブラリ 第23章 デバッグライブラリ |
デバッグライブラリのフックメカニズムでは特定のイベントで呼び出される関数を登録して、プログラムの実行時に呼び出すことができます。フックのトリガーとなるイベントは4種類あります。call イベントは、Luaが関数を呼び出すたびに発生します。return イベントは、関数が返るたびに発生します。line イベントは、Luaが新しい行の実行を開始したときに発生します。count イベントは、指定された数の命令後に発生します。Luaは、コールを生成したイベントを示す文字列(「call」、「return」、「line」、または「count」)を単一引数としてフックを呼び出します。さらに、行イベントでは、2番目の引数として新しい行番号も渡されます。フック内では、いつでもdebug.getinfo
を使用して詳細情報を取得できます。
フックを登録するには、debug.sethook
を2つまたは3つの引数で呼び出します。最初の引数はフック関数です。2番目の引数は、監視するイベントを示す文字列です。オプションの3番目の引数は、countイベントを取得する頻度を示す数値です。call、return、lineイベントを監視するには、マスク文字列に最初の文字(`c
´、`r
´、または`l
´)を追加します。countイベントを監視するには、単に3番目の引数としてカウンタを渡します。フックを無効にするには、引数なしでsethook
を呼び出します。
簡単な例として、次のコードは基本的なトレーサをインストールします。このトレーサは、インタプリタが実行する各新しい行の数を出力します
debug.sethook(print, "l")
print
をフック関数としてインストールし、行イベントでのみ呼び出すようLuaに指示するだけです。さらに高度なトレーサは、getinfo
を使用して、現在のファイル名をトレースに追加できます。function trace (event, line) local s = debug.getinfo(2).short_src print(s .. ":" .. line) end debug.sethook(trace, "l")
著作権 © 2003–2004 Roberto Ierusalimschy. すべての権利を保有します。 | ![]() |