debug.setupvalue (counter,2,10) end i = i + 1 end -- if until not name print(counter())执行以上代码输出结果为:1 2 index 1 k = 1 index 2 n = 2 11在以上实例中,计数器在每次调用时都会自增1。实例中我们使用了 getupvalue 函数查看局部变量的当前状态。我们可以设置局部变量为新值。实例中...
getupvalue(counter, i) if name then print ("index", i, name, "=", val) if(name == "n") then debug.setupvalue (counter,2,10) end i = i + 1 end -- if until not name print(counter()) 执行以上代码输出结果为:1 2 index 1 k = 1 index 2 n = 2 11在以上实例中,计数器在...
实例中,在设置前 n 的值为 2,使用 setupvalue 函数将其设置为 10。现在我们调用函数,执行后输出为 11 而不是 3。 调试类型 命令行调试 图形界面调试 命令行调试器有:RemDebug、clidebugger、ctrace、xdbLua、LuaInterface - Debugger、Rldb、ModDebug。 图形界调试器有:SciTE、Decoda、ZeroBrane Studio、akdebugge...
debug.getinfo 函数获得函数的当前表。 示例二 在调试过程中,我们常常需要查看或修改函数局部变量的值。因此,我们可以用 getupvalue 获得变量的值,用 setupvalue 修改变量的值。示例如下: function newCounter () local n = 0 local k = 0 return function () k = n n = n + 1 return n end end ...
13.setupvalue (f, up, value): 这个函数将 value 设为函数 f 的第 up 个上值。 如果函数没有那个上值,返回 nil 否则,返回该上值的名字。 14.traceback ([thread,] [message [, level]]): 如果message 有,且不是字符串或 nil, 函数不做任何处理直接返回 message。 否则,它返回调用栈的栈回溯信息。
local name, value = debug.getupvalue(env_f, i) if not name then break end local old_value = old_upvalue_map[name] if old_value then if type(old_value) ~= type(value) then debug.setupvalue(env_f, i, old_value) elseif type(old_value) == 'function' then ...
setupvalue (f, up, value): 这个函数将 value 设为函数 f 的第 up 个上值。 如果函数没有那个上值,返回 nil 否则,返回该上值的名字。 14. traceback([thread,] [message [, level]]): 如果message 有,且不是字符串或 nil, 函数不做任何处理直接返回 message。 否则,它返回调用栈的栈回溯信息。 字...
name, val = debug.getupvalue(counter, i) if name then print ("index", i, name, "=", val) if(name == "n") then debug.setupvalue (counter,2,10) end i = i + 1 end -- if until not name print(counter()) 执行以上代码输出结果为: ...
同样的,也可以利用调试库中的debug.setlocal和debug.setupvalue来完成同样的功能。 5. 小结 到这里,我们就把Lua语言中与调试有关的机制和代码都理解清楚了,剩下的问题就是如何利用它提供的这些接口,来编写一个类似gdb一样的调试器。 就好比:Lua已经把材料(米、面、菜、肉、佐料)摆在我们的面前了,剩下的就需要...
debug.setupvalue(func, i, value) return"upvalue" end end -- 省略 end _ENV表中查找 如果在普通的上值中还是没有找到,我们就去_ENV表中查找。首先调用_getvarvalue获取到_ENV表,注意这里的isenv标志为true。如果如果找到了_ENV表且表中存在名为name的变量,就修改其值为value,然后返回"global"以指示是修改...