一名宅。 - LUA
type: channel
link: https://zhaiyiming.com/tag/LUA/
items: 记一次LUA逻辑查错：查看LUA函数闭包内变量状态

记一次LUA逻辑查错：查看LUA函数闭包内变量状态
type: item
date: 2020-05-27T23:14:00+08:00
description: 今天好不容易偶然重现了一个渲染队列总是跳过一个渲染元素的问题，这问题一直存在但是却一直无法稳定重现。 拿到环境后开始分析问题，首先要知道这个对象有没有进渲染队列，可是渲染队列在导出接口的闭包内外界无法访问。 立马想到debug库，利用多次调用debug.getupvalue层层进入闭包，最终成功拿到了队列数据，发现对象在队列中，从而定位问题出在分帧渲染逻辑，跳转到响应代码位置问题迎刃而解。 local function getupval(f, k) local i = 1 while true do local n, v = debug.getupvalue(f, i) if not n then break end if n == k then return v end i = i + 1 end end Ps: 感谢热心市民叶枫影提供线索!