luajit无法钩取“尾部返回”

我们知道Lua有一个库函数debug.sethook,当任何函数返回时,

钩子函数将被调用,事件为“return”或“tail return”,但LuaJIT不会钩取“tail return”。

有没有方法关闭LuaJIT的特化, 并让它钩取“tail return”?

点赞
用户1442917
用户1442917

这是 LuaJIT 实现的“特性”,因此你不太可能将其关闭。正如 LuaJIT 的作者所建议的,你可以在钩子中跟踪堆栈深度,但你将无法特别追踪尾调返回。

请注意,Lua 也从尾调返回移动到尾调用:"对于调用事件,事件可以是 LUA_HOOKCALL,通常值,或 LUA_HOOKTAILCALL,为尾调用;在这种情况下,将没有相应的返回事件。"

2016-07-02 15:53:45