美文网首页
Cocos2d-x 异常处理

Cocos2d-x 异常处理

作者: 白小白152 | 来源:发表于2019-09-30 14:26 被阅读0次

    Lua中异常处理分为pcallxpcalldebug,若需在Lua中处理错误,必须使用 pcall(protected call)来包装所需执行的代码。

    1.pcall

    if pcall(fname, args...) then
        return true
    else
        return false
    end
    

    pcall接收一个函数和所要传递给函数的参数,并执行函数,函数执行有错误则返回true,无错误则返回false

    pcall以一种保护模式来调用第一个参数,因此可以捕获函数执行中的任何错误。

    使用示例

    function math.newrandomseed()
        local ok, socket = pcall(function()
            return require("socket")
        end)
    
        if ok then
            math.randomseed(socket.gettime() * 1000)
        else
            math.randomseed(os.time())
        end
        math.random()
        math.random()
        math.random()
        math.random()
    end
    

    2.xpcall

    local status, msg = xpcall(main, __G__TRACKBACK__)
    if not status then
        print(msg)
    end
    

    xpcall(调用函数, 错误捕获函数)

    通常在错误发生时,希望获得更多的调试信息,而不只是发生错误的位置。pcall返回时已经销毁了调用栈的部分内容。

    Lua提供了xpcall,接收第二个参数,即一个错误处理函数。当错误发生时,Lua会在调用栈展看unwind 前调用错误处理函数,于是可以在xpcall中使用debug库来获取关于错误的额外信息。

    3.debug

    Lua提供xpcall函数来捕获异常,当错误发生时,Lua会在栈释放前调用错误处理函数,因此可使用debug库收集错误信息。常用debug处理函数包括:

    debug.debug 给出Lua的提示符,可手工查看错误发生时的情况。
    debug.traceback控制器解释器用来构建错误信息的函数

    程序启动后,xpcall(表示以“保护模式”调用函数)会被执行,它会调用main()函数。如果发生错误,则会调用__G__TRACKBACK__()函数。

    相关文章

      网友评论

          本文标题:Cocos2d-x 异常处理

          本文链接:https://www.haomeiwen.com/subject/hlacpctx.html