美文网首页
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