0

私は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;                                         
}

これが私のコンストラクターです:

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

問題は、セッターに表示される値が中央の関数フックに出力される値と異なることです。多くの定義を試しましたが、異なる値のロジックが表示されません。

 Result : 
 8 SETHOOOOOOOOOK // received on my setter.
 3 // received on my central hook
4

1 に答える 1

1

私は私の問題を解決しました、問題は私のマップに悪い値があることです、フックの正しい定義は次のとおりです:

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-08T10:13:27.203 に答える