pcall
以保护模式调用函数, 返回true/false, errinfo:
function test() print("hello world") error("wrong value") end pcall(test) -- => false, xxxx.lua: 20: wrong value
xpcall
pcall发生错误时, 直接返回errinfo, 但没有保存栈信息, 栈信息可以通过下面的函数来获得, 第一个参数是描述string, n是保存的栈层数;
debug.traceback("description...",n)
以该栈信息函数结合xpcall, 作为xpcall的第二个参数: 错误处理函数, 就可以追踪栈信息:
function errhander(e) print("error info: " .. e) print("stack info: " .. debug.traceback("current 2 stack: " ,2)) end function ef() error("wrong value") end xpcall(ef,errhander) --=>打印出errinfo 和 相应的栈信息