今天好不容易偶然重现了一个渲染队列总是跳过一个渲染元素的问题,这问题一直存在但是却一直无法稳定重现。

拿到环境后开始分析问题,首先要知道这个对象有没有进渲染队列,可是渲染队列在导出接口的闭包内外界无法访问。

立马想到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