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