我正在尝试学习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);
}
} 问题是在setter中显示的值与在中心函数钩子中打印的值不同,我尝试了许多定义,但在不同的值中看不到任何逻辑。
Result :
8 SETHOOOOOOOOOK // received on my setter.
3 // received on my central hook发布于 2012-05-08 18:13:27
我解决了我的问题,问题是我的地图上有错误的值,钩子的正确定义是:
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;
} https://stackoverflow.com/questions/10486328
复制相似问题