Lua:如何在没有堆栈跟踪的情况下调用错误
发布时间:2020-12-14 21:46:55 所属栏目:大数据 来源:网络整理
导读:我正在使用Lua来解析用某种语言编写的脚本(让我们称之为L)并创建可以由例如运行的Lua代码. LuaJIT.但是为了简化用户的调试,我想将Lua / LuaJIT给出的运行时错误映射到L文件中的正确行.我这样做是通过xpcalling创建的Lua代码,翻译错误消息和堆栈跟踪,然后使用
我正在使用Lua来解析用某种语言编写的脚本(让我们称之为L)并创建可以由例如运行的Lua代码. LuaJIT.但是为了简化用户的调试,我想将Lua / LuaJIT给出的运行时错误映射到L文件中的正确行.我这样做是通过xpcalling创建的Lua代码,翻译错误消息和堆栈跟踪,然后使用此消息调用错误.不幸的是,这给了我两个堆栈跟踪,一个是由我创建的,另一个是追溯到调用错误的函数.有可能摆脱这种堆栈跟踪,还是有更好的方法来做到这一点?
local status,err = xpcall(loadedCode,debug.traceback) if not status then error(createANewErrorMessageWithPrettyTraceback(err),0) end 输出: luajit: ./my/file.name:5: Some error message stack traceback: my pretty traceback stack traceback: [C]: in function 'error' ./my/file/calling/error.lua:44: in function <./my/file/calling/error.lua:26> ./my-main:16: in main chunk [C]: at 0x00404180 我知道,例如Moonscript做了类似的事情,但据我所知,他们只是将新的错误消息写入stderr然后继续正常,而不是停止我想做的程序. 解决方法
您只需显示所需的已修改回溯即可退出.
local function errh(err) print(createANewErrorMessageWithPrettyTraceback(debug.traceback(err,2))) os.exit(-1) -- error code end local status,result = xpcall(loadedCode,errh) -- The script will never reach this point if there is an error. print(result) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |