Lua_钩子和Lua_调试->;事件 我试图学习Lua并在C++中构建虚拟机,我想编写一个调试类,让我的生活更轻松。我实际上被阻止了,因为我不明白回调是如何完成的,下面是我的代码: //Im here adding my fct to a global map. void Debugger::setFctHook(void) { g_hookers[LUA_MASKCALL] = HookCall; g_hookers[LUA_MASKRET] = HookRet; g_hookers[LUA_HOOKTAILRET] = HookRet; g_hookers[LUA_MASKLINE] = HookLine; g_hookers[LUA_MASKCOUNT] = HookCount; }
这是我的构造函数:Lua_钩子和Lua_调试->;事件 我试图学习Lua并在C++中构建虚拟机,我想编写一个调试类,让我的生活更轻松。我实际上被阻止了,因为我不明白回调是如何完成的,下面是我的代码: //Im here adding my fct to a global map. void Debugger::setFctHook(void) { g_hookers[LUA_MASKCALL] = HookCall; g_hookers[LUA_MASKRET] = HookRet; g_hookers[LUA_HOOKTAILRET] = HookRet; g_hookers[LUA_MASKLINE] = HookLine; g_hookers[LUA_MASKCOUNT] = HookCount; },c++,c,lua,C++,C,Lua,这是我的构造函数: Debugger::Debugger(VirtualMachine &vm, uint count) : VM_(vm), count_(count) { setFctHook();
Debugger::Debugger(VirtualMachine &vm, uint count)
: VM_(vm), count_(count)
{
setFctHook();
if (vm.isFonctionnal())
{
vm.addDebugger(this);
lua_sethook(vm.getLua(), HookEvents, 0, count_);
}
}
我的二传手:
void Debugger ::setHook(int hookMask) const
{
std::cout << hookMask << "SETHOOOOOOOOOK" << std::endl;
lua_sethook(VM_.getLua(), HookEvents, hookMask, count_);
}
我解决了我的问题,问题是我的地图上有错误的值,钩子的正确定义是:
void Debugger::setFctHook(void)
{
g_hookers[LUA_HOOKCALL] = HookCall;
g_hookers[LUA_HOOKRET] = HookRet;
g_hookers[LUA_HOOKTAILRET] = HookRet;
g_hookers[LUA_HOOKLINE] = HookLine;
g_hookers[LUA_HOOKCOUNT] = HookCount;
}
有什么区别吗?为什么前者是错误的?
Result :
8 SETHOOOOOOOOOK // received on my setter.
3 // received on my central hook
void Debugger::setFctHook(void)
{
g_hookers[LUA_HOOKCALL] = HookCall;
g_hookers[LUA_HOOKRET] = HookRet;
g_hookers[LUA_HOOKTAILRET] = HookRet;
g_hookers[LUA_HOOKLINE] = HookLine;
g_hookers[LUA_HOOKCOUNT] = HookCount;
}