在游戏开发里面,lua还是挺常用到的,然而这东西虽然挺灵活好用的,可是也有一些比较容易踩到的坑,全局变量就是一个。
由于lua里面随手怎么的写少一个local啥的,就可以轻松创造出一个全局变量来,导致这种定义错全局变量的问题挺容易发生的,尤其是在一个代码量比较大的项目里,一人一个,就挺稳的了。
那么为了尽量查找和解决这样的问题,突然脑子一热,就想了一波,既然_G也是那么一个表,又有__newindex这种东西,说不定就能搞个一下,带定义调用__newindex的时候给记录一下,回头能查一下。于是就再这么以向,debug.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 .. "\n\r" )
rawset(t, k, v)
end}
)