local traceTable = { __index = function(this, key) if key == targetKey then if isNeedShowGet then __selfprint('------------------------------------------------------------------') __selfprint(targetKey .. '对应值被访问') __selfprint(debug.traceback()) __selfprint('------------------------------------------------------------------') end return swap end
returngetmetatable(this)[key] end, __newindex = function(this, key, value) if key == targetKey then __selfprint('------------------------------------------------------------------') __selfprint(targetKey .. '对应值被改变,value为:' .. tostring(value)) iftype(value) == 'table'then __selfdump(value) end __selfprint(debug.traceback()) __selfprint('------------------------------------------------------------------') swap = value return end rawset(this, key, value) end }
setmetatableParent(t, traceTable) end
使用
如下测试代码:
1 2 3 4 5 6 7 8
local t1 = {} t1.a1 = 2
debugTraceChange(t1, 'a1')
t1.a1 = 3
t1.a1 = 4
输出结果为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
[LUA-print] ------------------------------------------------------------------ [LUA-print] a1对应值被改变,value为:3 [LUA-print] stack traceback: [string"selfConfig.lua"]:328: in function'__newindex' [string"selfDebug.lua"]:23: in function'selfDebug' [string"selfDebug.lua"]:29: in main chunk [C]: in function'require' [string"selfConfig.lua"]:201: in function'func' [LUA-print] ------------------------------------------------------------------ [LUA-print] ------------------------------------------------------------------ [LUA-print] a1对应值被改变,value为:4 [LUA-print] stack traceback: [string"selfConfig.lua"]:328: in function'__newindex' [string"selfDebug.lua"]:25: in function'selfDebug' [string"selfDebug.lua"]:29: in main chunk [C]: in function'require' [string"selfConfig.lua"]:201: in function'func' [LUA-print] ------------------------------------------------------------------