local status, msg = xpcall(main, __G__TRACKBACK__) -- for CCLuaEngine traceback function __G__TRACKBACK__(msg) local message = debug.traceback(msg, 3) if qy.DEBUG then self:showBugMesg("lua error:\n\t" .. message) end -- 上報異常日志 require("utils.Analytics"):onCrash(message) print("----------------------------------------") print("錯誤信息\nlua error:\n\t" .. message) print("----------------------------------------") return msg end
xpcall 接受兩個參數:調用函數、錯誤處理函數。
當錯誤發生時,Lua會在棧釋放以前調用錯誤處理函數,因此可以使用debug庫收集錯誤相關信息。
常用的debug處理函數:debug.debug和debug.traceback,
前者給出Lua的提示符,你可以自己動手察看錯誤發生時的情況;
后者通過traceback創建更多的錯誤信息,也是控制台解釋器用來構建錯誤信息的函數。
你可以在任何時候調用debug.traceback獲取當前運行的traceback信息。