第一版是为 Lua 5.0 编写的。虽然对于后续版本来说仍然有很大关联性,但有一些不同之处。
第四版针对 Lua 5.3,可在 亚马逊 和其他书店购买。
购买本书,您还可以帮助支持 Lua 项目。
Lua 中的编程 Lua | ||
第三部分。标准库 第 23 章。调试库 |
调试库的钩子机制允许我们在程序运行时注册一个函数,该函数将在特定事件中被调用。有四种类型的事件可以触发钩子:每次 Lua 调用函数时都会发生调用事件;每次函数返回时都会发生返回事件;当 Lua 开始执行新代码行时会发生行事件;在给定数量的指令之后会发生计数事件。Lua 使用单个参数调用钩子,该参数是一个字符串,描述生成调用的事件:"call"
、"return"
、"line"
或 "count"
。此外,对于行事件,它还传递第二个参数,即新行号。我们始终可以使用 debug.getinfo
在钩子中获取更多信息。
要注册钩子,我们使用两个或三个参数调用 debug.sethook
:第一个参数是钩子函数;第二个参数是一个字符串,描述我们要监视的事件;可选的第三个参数是一个数字,描述我们希望获取计数事件的频率。要监视调用、返回和行事件,我们在掩码字符串中添加它们的首字母(`c`´
、`r`´
或 `l`´
)。要监视计数事件,我们只需提供一个计数器作为第三个参数。要关闭钩子,我们调用不带任何参数的 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。保留所有权利。 |