在以实例中,我们使用到了 debug 库的 traceback 和 getinfo 函数, getinfo 函数用于返回函数信息的表。 另一个实例我们经常需要调试函数的内的局部变量。我们可以使用 setupvalue 函数来设置这些局部变量。实例如下:实例 function newCounter () local n = 0 local k = 0 return function () k = n n = n...
在以实例中,我们使用到了 debug 库的 traceback 和 getinfo 函数, getinfo 函数用于返回函数信息的表。 另一个实例我们经常需要调试函数的内的局部变量。我们可以使用 getupvalue 函数来设置这些局部变量。实例如下:实例 function newCounter () local n = 0 local k = 0 return function () k = n n = ...
3.gethook(optional thread): 返回三个表示线程钩子设置的值: 当前钩子函数,当前钩子掩码,当前钩子计数 4.getinfo ([thread,] f [, what]): 返回关于一个函数信息的表。 你可以直接提供该函数, 也可以用一个数字 f 表示该函数。 数字 f 表示运行在指定线程的调用栈对应层次上的函数: 0 层表示当前函数(ge...
int lua_gethookcount (lua_State *L); 返回当前钩子记数。 lua_gethookmask int lua_gethookmask (lua_State *L); 返回当前的钩子掩码 (mask) 。 lua_getinfo int lua_getinfo (lua_State *L, const char *what, lua_Debug *ar); 返回一个指定的函数或函数调用的信息。 当用于取得一次函数调用的...
void lua_sethook (lua_State *L, lua_Hook f, int mask, int count); 第二个参数f需要指向我们自己定义的钩子函数,这个钩子函数原型为: typedef void (*lua_Hook) (lua_State *L, lua_Debug *ar); 我们也可以通过下面即将介绍的调试库中的函数来设置钩子函数,效果是一样的,因为调试库函数的内部也是调...
debug() 方法进入交互模式,运行用户输入的命令,如查看变量、改变值、计算表达式等。输入 "cont" 结束,继续执行。getfenv() 返回对象环境变量。gethook() 返回线程钩子设置值。getinfo() 返回函数信息表,提供层级上的函数信息。debug.getlocal() 获取指定函数层局部变量的名称和值。getmetatable() ...
Lua 中 debug 库包含以下函数: sethook ([thread,] hook, mask [, count]): 序号 方法&用途 1. debug():进入一个用户交互模式,运行用户输入的每个字符串。使用简单的命令以及其它调试设置,用户可以检阅全局变量和局部变量,改变变量的值,计算一些表达式,等等。输入一行仅包含cont的字符串将结束这个函数,这样调用...
--[[ debug.getupvalue(f, up) 返回函数("Closure")"f"的第"up"个"upvalue"的名字和值。 Lua按照"upvalues"在匿名函数中出现的顺序对其编号。如果指定的"up"索引越界,则返回"nil"。 以'('开头的变量名表示没有名字的变量(比如是循环控制用到的控制变量,或是去除了调试信息的代码块)。
所以这里我们debug hook函数内部实现是一个状态机,当没有进入db的时候,虽然lua也会进行调用该hook,但该hook内部不作任何处理。只有当执行db函数进入debug模式,hook内部才会有相应处理。 我们在debug hook里面提供了多种状态,包括none hook,step hook,next hook和return hook。
我们可以使用 getupvalue 函数来设置这些局部变量。实例如下: 实例function newCounter () local n = 0 local k = 0 return function () k = n n = n + 1 return n end end counter = newCounter () print(counter()) print(counter()) local i = 1 repeat name, val = debug.getupvalue(counter...