我正在尝试为运行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端完成这个任务。
lua_State
之间有什么多重关系?例如,我们可以假设对于给定的lua_State
,最多只能有一个调试器类吗?调试器类是否可以在多个lua_State
之间共享,还是每个lua_State
都有自己独立的唯一调试器类? - greatwolfhook
函数中将其推入堆栈,但我不确定为什么您要担心它会溢出。您不能只做一个lua_checkstack
,如果失败了就在您的C代码中处理它吗? - greatwolf