简单的lua全局变量监控

在游戏开发里面,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}
)

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值