捕获lua_error()的输出?

时间:2013-05-23 10:40:30

标签: error-handling lua

目前我在控制台应用程序中使用lua,意味着只要脚本出现错误并调用lua_error(),就会打印相关文本。

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

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

2 个答案:

答案 0 :(得分:3)

正如Lua manua l指出的那样,您将需要使用受保护的调用来从您的应用程序执行Lua代码。如果您遇到来自不受保护的调用的错误,Lua将调用一个panic函数,该函数将错误输出写入您想要删除的控制台。

特别是,lua_pcall可能会提供自定义消息处理程序,以便在发生错误时调用。您可以提供与GUI交互的自定义​​处理程序。

请注意,消息处理程序是通过C-longjmp调用的,该消息处理程序在消息处理程序中可以做什么和不能做什么都有certain implications

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

答案 1 :(得分:0)

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

通过 console ,我认为你的意思是你正在使用标准的Lua命令行解释器。您现在似乎想将Lua嵌入到您的应用程序中。在这种情况下,您使用lua_pcall运行Lua脚本并检查其返回值,处理可能发生的任何错误。