捕获 lua_error() 的输出?

目前我正在使用 Lua 在控制台应用程序中,意味着每当脚本出现错误并调用 lua_error() 时,相关文本都会被打印出来。

现在我必须将这个东西移入一个在后台运行的 GUI 应用程序中,它没有控制台。出现的错误文本必须提交给主应用程序,以便它能够进行必要的操作。作为第二点,整个应用程序不能停止(就像控制台应用程序那样)。

所以我的问题是:有没有可能在代码的某个地方捕获由 lua_error() 给出的错误消息以进行进一步处理,并避免应用程序停止?

点赞
用户107090
用户107090

lua_error 本身不会产生任何输出: 是调用 Lua 的应用程序处理如何报告错误。

我假设你所说的“控制台”是指你正在使用标准 Lua 命令行解释器。看起来你现在想将 Lua 嵌入到你的应用程序中。在这种情况下,你可以使用 lua_pcall 运行 Lua 脚本并检查其返回值,处理任何可能发生的错误。

2013-05-23 10:51:26
用户577603
用户577603

正如 Lua 手册 所指出的那样,你应该使用受保护的调用来执行你的应用程序中的 Lua 代码。如果你遇到未经保护的调用错误,Lua 将调用一个panic函数,这将写入到你想要摆脱的控制台的错误输出。

特别地,lua_pcall 可以提供自定义的消息处理程序,在发生错误时调用。你可以提供一个与你的 GUI 交互的自定义处理程序。

但要注意的是,消息处理程序是通过 C-longjmp 调用的,从消息处理程序中可以做和不能做的事情会有一些 特定影响

或者,根本不提供消息处理程序,而是检查lua_pcall函数的返回值。如果发生错误,则可以从Lua stack的顶部检索错误消息。

2013-05-23 10:55:36