我正在尝试为运行 lua 脚本的进程编写调试器,并且记录在案的方法(在 C 中)是使用lua_sethook
:
int lua_sethook (lua_State *L, lua_Hook f, int mask, int count);
lua_Hook
定义为:
typedef void (*lua_Hook) (lua_State *L, lua_Debug *ar);
钩子只得到一个lua_State
指针,这很好,但是我怎样才能将指向我的调试器类的指针与它关联起来,以便我可以从那里回到我的调试器类呢?
我想避免在这种情况下使用全局变量,因为我有多个lua_State
实例。我想我可以使用lua_State *
指向调试器实例的指针映射,但这似乎效率不高。并且将其作为全局存储在 中lua_State *
似乎没有意义,因为为了能够检索它,我必须将至少一个值推送到 lua 堆栈上,这在以下情况下似乎很难/不可能做到lua 堆栈溢出。
我错过了什么吗?我将如何做到这一点?我知道,我可以在 lua 代码中完成此操作,但我想了解如何从 C 端执行此操作。