如果某个未知范围内的局部变量被设置为 256
,我如何知道它发生了?
我希望能够一次查找一个值(假设这是可能的)。
我有权访问调试
API。
最佳答案
您可以在调试 Hook 内循环遍历当前范围内的所有局部变量,并检查哪一个具有您需要的值:
do
local seen = {}
debug.sethook(function(ev, line)
local level = 2
local target = 256
local i = 1
while true do
local name, value = debug.getlocal(level, i)
if not name then break end
if value == target and string.sub(name, 1, 1) ~= '(' and not seen[name] then
print("at line", line, "variable", name, value)
seen[name] = true
elseif seen[name] and value ~= target then
seen[name] = nil
end
i = i + 1
end
end, "l")
end
local a = 256
local b = 11
a = 13
a, b = 256, 256
print("done")
这会为我打印以下内容:
at line 23 variable a 256
at line 26 variable a 256
at line 26 variable b 256
done
这只适用于局部变量。对于全局变量,您可以迭代 _G
或 _ENV
表并比较值。
请注意,打印的行是下一个语句的行,而不是发生更改的行(因为钩子(Hook)在执行该行之前停止)。
还有两个其他选项可以跟踪变量更改(有一些限制):(1) using metamethods and a proxy table和 (2) using a debugger .
关于lua - 在 Lua 中如何判断 ANY 变量何时被设置为给定值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29906624/