发生一个暂时无法解决的bug,该bug是这样出现的(不是必现):
在连接进入游戏服务器成功时执行
// 这是运行run的代码,是开启一个新线程来运行一直循环跑run(直到游戏结束)
_subThreadInstance = new std::thread(CC_CALLBACK_0(CNetDelegate::run,this));
_subThreadInstance->detach();
is_need_quit = false;
void CNetDelegate::run()
{
while (!is_need_quit)
{
// …
onConnected(); // 运行到这里
}
is_need_quit = true;
}
void LuaGameNet::onConnected()
{
this->dispatchConnectedEvent(); // 运行到这里
}
void LuaGameNet::dispatchConnectedEvent()
{
int nHandler = ScriptHandlerMgr::getInstance()->getObjectHandler((void*)this, ScriptHandlerMgr::HandlerType::COCOSSOCKET_OPEN);
if (0 != nHandler) {
CommonScriptData data(nHandler, “”);
ScriptEvent event(kCommonEvent, (void*)&data);
ScriptEngineManager::getInstance()->getScriptEngine()->sendEvent(&event); // 运行到这里
}
}
int LuaEngine::sendEvent(ScriptEvent* evt)
{
// …
case kCommonEvent:
{
return handleCommonEvent(evt->data); // 运行到这里
}
break;
}
int LuaEngine::handleCommonEvent(void* data)
{
// …
int ret = _stack->executeFunctionByHandler(commonInfo->handler, commonInfo->eventSource ? 2 : 1); // 运行到这里
}
int LuaStack::executeFunctionByHandler(int nHandler, int numArgs)
{
// …
ret = executeFunction(numArgs); // 运行到这里, 此时 numArgs 为 1
}
剩下的栈堆为:
-2:TD.exe!cocos2d::luaStack::executeFunctionByHandler(int nHandler, int numArgs) 行 488 + 0x13字节 【也就是上一行】
-1:[下面的框架可能不正确和/或缺失,没有为lua51.dll加载符号]
0:lua51.dll!lua_yield() + 0xf187 字节【这是出错位置了,无法显示】
出现的异常叫:
TD.exe 中的 0x002821e7 (lua51.dll) 处有未经处理的异常: 0xC0000005: 读取位置 0xffffffd0 时发生访问冲突
如有适用于此异常的处理程序,该程序便可安全地继续运行。
会不会有可能是lua那边的代码问题?