簡単なluaグローバル変数モニタリング
1061 ワード
ゲーム開発ではluaがよく使われていますが、これは柔軟で使いやすいですが、踏みやすい穴もあります.グローバル変数は一つです.
luaの中で勝手にどのように1つのlocalを少なく書くことができるため、簡単に1つのグローバル変数を創造することができて、このような定義の間違いのグローバル変数の問題は発生しやすくて、特に1つのコードの量の比較的に大きいプロジェクトの中で、1人1つ、とても安定しています.
では、このような問題をできるだけ探して解決するために、急に頭が熱くなって、一波考えました.Gもそのような1つの時計で、また__がありますnewindexというものは、定義呼び出しが付いているかもしれません.newindexの時に記録して、後で調べることができます.それでこうしてgetinfo()、落ち着いた!そうみたいだdebug.getinfo()の情報を印刷して、問題ありません.
そこでこの簡単なアイデアから生まれたコードは以下の通りです.縁のある方はもっと完璧な解決策をあげましょう.
luaの中で勝手にどのように1つのlocalを少なく書くことができるため、簡単に1つのグローバル変数を創造することができて、このような定義の間違いのグローバル変数の問題は発生しやすくて、特に1つのコードの量の比較的に大きいプロジェクトの中で、1人1つ、とても安定しています.
では、このような問題をできるだけ探して解決するために、急に頭が熱くなって、一波考えました.Gもそのような1つの時計で、また__がありますnewindexというものは、定義呼び出しが付いているかもしれません.newindexの時に記録して、後で調べることができます.それでこうしてgetinfo()、落ち着いた!そうみたいだdebug.getinfo()の情報を印刷して、問題ありません.
そこでこの簡単なアイデアから生まれたコードは以下の通りです.縁のある方はもっと完璧な解決策をあげましょう.
--
local WriteToFile = function(fileName, content)
local f = assert(io.open(fileName,'a'))
f:write(content)
f:close()
end
--
local logPath = "E:\\gamelog.txt"
-- ,
os.remove(logPath)
setmetatable(_G, {__newindex = function(t,k,v)
local info = debug.getinfo(2, "lS")
WriteToFile(logPath, "k:" .. tostring(k) .. " == type:" .. type(v) .. " == short_src:" .. info.short_src .. " == currentline:" .. info.currentline .. "
\r" )
rawset(t, k, v)
end}
)