cocos2dx-lua项目中空指针崩溃的问题

cocos2dx-lua项目中空指针崩溃的问题

在公司的项目维护中,出现大量空指针崩溃问题,例如sp:setVisible(false)类似这样的代码,崩溃日志报sp变量为空,C++绑定lua的代码中报崩溃异常。

崩溃日志如下:

[LUA-print] [string "/xxx/src/main.lua"]:270: invalid 'cobj' in function 'lua_cocos2dx_Node_setVisible'
stack traceback:
        [string "/xxx/src/main.lua"]:270: in function <[string "/xxx/src/main.lua"]:269>

出现类似异常的还有removeFromParent等方法,但是使用的地方非常多,根据崩溃日志只能确定是例如setVisible在C++绑定的地方错的,但是lua层具体哪一行无法确定。但是是老项目维护,不能改太多代码。因此想出了哪个方法报错就重写哪个方法的办法。

例如setVisible重写,在重写的方法里加上空指针判断。使用tolua.isnull(xx)

源码如下,直接放在cocos2dx_lua的NodeEx.lua下既可:

local overwrite_function_names = {"setVisible", "removeFromParent"}
local function overwrite_node_function(func_name)
    if Node[func_name] then
        Node["_" .. func_name] = Node[func_name]
        Node[func_name] = function(self, ...)
            if tolua.isnull(self) then
                return
            end
            return Node["_" .. func_name](self, ...)
        end
    end
end
for _, func_name in ipairs(overwrite_function_names) do
    overwrite_node_function(func_name)
end
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 14,029评论 0 38
  • 指令集 lua_capture_error_log lua_use_default_type lua_malloc...
    吃瓜的东阅读 12,158评论 0 2
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,761评论 0 17
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,172评论 1 32
  • 昨天谈到做时间的买卖人,其实终极目标是将自己的时间出售多份。那么如何将自己的时间出售多份呢?我也谈到做一个有价值的...
    小笨郎阅读 214评论 2 0