首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lua_hook和lua_Debug->事件

Lua_hook和lua_Debug->事件
EN

Stack Overflow用户
提问于 2012-05-08 01:23:37
回答 1查看 1.1K关注 0票数 0

我正在尝试学习lua并在c++中构建一个虚拟机,我想写一个调试类,让我的生活变得更容易。我实际上被阻塞了,因为我不理解回调是如何完成的,下面是我的代码:

代码语言:javascript
复制
 //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;                                         
}

下面是我的构造函数:

代码语言:javascript
复制
Debugger::Debugger(VirtualMachine &vm, uint count)         
  : VM_(vm), count_(count)                                 
 {                                                          
  setFctHook();                                            
  if (vm.isFonctionnal())                                  
   {                                                      
     vm.addDebugger(this);                                
     lua_sethook(vm.getLua(), HookEvents, 0, count_);     
   }                                                      
}

和我的二传手:

代码语言:javascript
复制
 void    Debugger ::setHook(int hookMask) const                   
 {                                                               
   std::cout << hookMask << "SETHOOOOOOOOOK" << std::endl;       
    lua_sethook(VM_.getLua(), HookEvents, hookMask, count_);      
 }                                                               

这是我的中央钩子:

代码语言:javascript
复制
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中显示的值与在中心函数钩子中打印的值不同,我尝试了许多定义,但在不同的值中看不到任何逻辑。

代码语言:javascript
复制
 Result : 
 8 SETHOOOOOOOOOK // received on my setter.
 3 // received on my central hook
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-08 18:13:27

我解决了我的问题,问题是我的地图上有错误的值,钩子的正确定义是:

代码语言:javascript
复制
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;
}  
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10486328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档