Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Debugging 行处理后的Lua钩子状调用_Debugging_Lua_Hook - Fatal编程技术网

Debugging 行处理后的Lua钩子状调用

Debugging 行处理后的Lua钩子状调用,debugging,lua,hook,Debugging,Lua,Hook,Lua的特点是在处理每一行之前进行钩子调用。我需要的是在处理完线路后调用,以便检查遇到的错误等等。有没有办法打这样的电话 否则,如果在脚本的最后一行遇到错误,事情就会变得有点混乱。我没有得到任何反馈 更新#1 我们希望捕获Lua错误和通过Lua_error(*L)C接口断言的“我们的”错误,Lua应该抛出正确的调试信息,包括错误发生的行号 使用返回钩子,我们总是得到错误行号-1,这不是我们想要的。在lua_error(*L)之后,使用pcall和hook设置的任意组合,我们可以得到行号-1,或者

Lua的特点是在处理每一行之前进行钩子调用。我需要的是在处理完线路后调用,以便检查遇到的错误等等。有没有办法打这样的电话

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

更新#1 我们希望捕获Lua错误和通过Lua_error(*L)C接口断言的“我们的”错误,Lua应该抛出正确的调试信息,包括错误发生的行号

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

解决方案# 我们设法使一切顺利。问题是Lua在检测到错误后抛出了一个真正的C异常,因此我们从Lua操作调用的一些“清理和完成”C代码没有执行,这弄乱了一些标志等等。解决方案是在调用lua_error(…)之前执行“清理代码”。这是正确的和期望的Lua行为,因为我们确实希望在调用Lua_error(…)后停止执行该函数,我们错误地期望在Lua_error(…)调用后执行任何代码


Tnx Paul Kulchenko,其中一些行为是在试图设计一个复制问题的简单示例脚本时发现的。

尝试设置一个返回钩子:它将在执行最后一行后被调用。

我不确定调试钩子是否是您尝试执行的操作的最佳解决方案(或者您需要提供更多细节)。如果您只需要检查运行时错误,那么如果您可以使用
pcall
运行代码并获得指向错误发生行号的错误消息(或者使用
xpcall
,这也允许您获取堆栈跟踪),那么为什么要使用调试挂钩呢?您可以将其与debug.getinfo(func,“L”)相结合,以获得一个表,该表的索引是函数的有效行号。

在开始之前的每一处理行之前,然后在每一处理行之后,最后一行谢谢您的回答。我用一些附加信息更新了这个问题。我们还想用它来处理通过lua_error(*L)断言的“我们的”错误,但似乎没有任何东西能正常工作。我更新了问题。你需要一个简单的脚本来显示问题。