luaのメタテーブルを用いてtable変数の変化を追跡する
880 ワード
プロジェクト開発中にバグが発生し、グローバルtableの変数と関係がありますが、この変数は複数のファイルで変更されています.コード追跡を見て、この変数が具体的にその場所で変更されたのを見て、めまいがして、問題も見つかりませんでした.后で何か简単な方法がないと思って、luaの元表を思い出して、_indexと_newindex、これを利用して、debug.tarcebackを組み合わせて使用します.
具体例:例えばdataテーブルのhp変数を追跡する必要がある
実はこのモードでは、tableのfunctionの呼び出し回数を記録したり、tableの変数を暗号化したりすることもできます.自分のニーズに合わせて活用できる.
参照先:http://blog.csdn.net/wangbin_jxust/article/details/12108189
具体例:例えばdataテーブルのhp変数を追跡する必要がある
local data = {}
local mt = {
__index = function ( table, key )
return rawget(table, key)
end,
__newindex = function ( table, key, value )
if key == "hp" then
print("this is DataGlobal __newindex key is", key, value)
print(debug.traceback())
end
rawset(table, key, value)
end
}
setmetable(data, mt)
ここで注意すべきはrawgetとrawsetを使用し、メタテーブルの呼び出しを迂回し、table[key]=valueを直接使用するとデッドループに入ることです.実はこのモードでは、tableのfunctionの呼び出し回数を記録したり、tableの変数を暗号化したりすることもできます.自分のニーズに合わせて活用できる.
参照先:http://blog.csdn.net/wangbin_jxust/article/details/12108189