Lua挂钩式呼叫AFTER线路处理

时间:2014-08-25 12:03:28

标签: debugging lua hook

Lua在每个处理过的行之前都有钩子调用。我需要的是处理AFTER行的调用,以便我可以检查遇到的错误等等。有没有办法打这种电话?

如果在脚本的最后一行遇到错误,则会有点混乱。我没有得到任何反馈。

更新#1 我们想要抓住Lua错误和我们的'通过lua_error(* L)C接口断言的错误,Lua应该抛出正确的调试信息,包括发生错误的行号。

使用返回钩子我们总是得到错误行号-1,这不是我们想要的。在lua_error(* L)之后使用pcall和任何钩子设置的任意组合,我们得到行号-1或下一个执行行的编号,从来都不是正确的行。

解# 我们设法让一切顺利。事情是Lua在检测到错误之后抛出了一个真正的C异常,所以我们的一些清洁&最终化'从Lua操作调用的C代码没有执行,这搞砸了一些标志等等。解决方案是执行清理代码'在调用lua_error(...)之前。这是正确的并且需要Lua行为,因为我们真的想在调用lua_error(...)后停止执行函数,我们错误地认为在lua_error(...)调用之后会执行任何代码。

Tnx Paul Kulchenko,在尝试设计一个可以重现问题的简单示例脚本时发现了一些这种行为。

2 个答案:

答案 0 :(得分:0)

尝试设置 return 挂钩:它将在执行最后一行后调用。

答案 1 :(得分:0)

我不确定调试挂钩是您尝试做什么的最佳解决方案(或者您需要提供更多详细信息)。如果您只需要检查运行时错误,那么为什么要使用调试挂钩,如果您可以使用pcall运行代码并获取指向错误发生的行号的错误消息(或使用{{ 1}},它还允许你获得堆栈跟踪)?您可以将其与xpcall结合使用,以获得其索引是函数的有效行号的表。