Lua如何在不提供堆栈跟踪的情况下调用错误处理?

2026-04-01 20:461阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计534个文字,预计阅读时间需要3分钟。

Lua如何在不提供堆栈跟踪的情况下调用错误处理?

我正在使用Lua来解析某种语言编写的脚本(我们称之为L),并创建可由运行例如此Lua代码的LuaJIT。但为了简化用户调试,我想将Lua+/LuaJIT输出的运行时错误映射到L文件中的正确行。

我正在使用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

输出:

Lua如何在不提供堆栈跟踪的情况下调用错误处理?

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然后继续正常,而不是停止我想做的程序.
有可能这样做,然后调用没有参数的错误,这将使程序失败(实际上我认为它的错误失败),但这感觉就像一个非常丑陋的解决方案,所以我宁愿保持愚蠢的第二个跟踪比这样做.
PS:我假设标题实际上不起作用(因为错误只需要两个参数),所以我实际上问的是如何能够实现这样的事情. (是否有其他功能可能会做类似的事情,或者我应该在哪里找出如何自己编写该功能.)
编辑:是否可以编辑错误用于获取其回溯的函数,就像使用debug.traceback一样?

您只需显示所需的已修改回溯即可退出.

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)

本文共计534个文字,预计阅读时间需要3分钟。

Lua如何在不提供堆栈跟踪的情况下调用错误处理?

我正在使用Lua来解析某种语言编写的脚本(我们称之为L),并创建可由运行例如此Lua代码的LuaJIT。但为了简化用户调试,我想将Lua+/LuaJIT输出的运行时错误映射到L文件中的正确行。

我正在使用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

输出:

Lua如何在不提供堆栈跟踪的情况下调用错误处理?

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然后继续正常,而不是停止我想做的程序.
有可能这样做,然后调用没有参数的错误,这将使程序失败(实际上我认为它的错误失败),但这感觉就像一个非常丑陋的解决方案,所以我宁愿保持愚蠢的第二个跟踪比这样做.
PS:我假设标题实际上不起作用(因为错误只需要两个参数),所以我实际上问的是如何能够实现这样的事情. (是否有其他功能可能会做类似的事情,或者我应该在哪里找出如何自己编写该功能.)
编辑:是否可以编辑错误用于获取其回溯的函数,就像使用debug.traceback一样?

您只需显示所需的已修改回溯即可退出.

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)