Lua_hook 和 lua_Debug->event

我正在学习Lua和在C++中构建虚拟机,我想编写一个调试类,以使我的生活更轻松。我实际上被阻止了,因为我不理解回调是如何完成的,下面是我的代码:

//在此处将我的fct添加到全局映射中
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;
}

这是我的构造函数:

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_);
 }

这是我的中央钩:

static void HookEvents(lua_State * lua,lua_Debug * debug)
{
  std :: map <int,fctHook> :: iterator it;
  std :: cout << debug-> event << std :: endl;
  it = g_hookers.find(debug-> event);
  if(it!= g_hookers.end())
  {
    std :: cout <<“First:”<< it-> first << std :: endl;
    it-> second(lua);
  }
}

问题在于我在setter中显示的值与我中央功能钩子中打印的值不同,我尝试了许多定义,但我看不到不同值中的任何逻辑。

结果:
8 SETHOOOOOOOOOK//在我的setter上接收到。
3//在我的中央挂钩上收到。 

原文链接 https://stackoverflow.com/questions/10486328

点赞
stackoverflow用户1324369
stackoverflow用户1324369

我解决了我的问题,问题在于我的地图上有错误的值,对于钩子而言,正确的定义如下:

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;
}
2012-05-08 10:13:27