cocos creator 1.7.2 beta1宕机BUG

这么严重的问题都没人管了.:sweat:

对于我来说没什么,是升级时碰到的,马上回退到了1.6.1就正常了.

不能没人管,是根据你这个信息,无法定位。
如果有demo复现问题,就好办点。

这有完整的调用栈,最多算中等难度的问题,感觉分析周边代码能解决。

这个真的分析不出来,得结合使用代码才能分析。

这个问题有没有解决?

就这么个小BUG,自己解决啦,开源的

这个bug你遇到过吗?

因为我回退到1.6.1了,所以暂时没有去解决,因为比较忙,没去细看了.

int ScriptingCore::handleActionEvent(void* data)
{
if (nullptr == data)
return 0;

ActionObjectScriptData* actionObjectScriptData = static_cast<ActionObjectScriptData*>(data);
if (nullptr == actionObjectScriptData->nativeObject || nullptr == actionObjectScriptData->eventType)
    return 0;

Action* actionObject = static_cast<Action*>(actionObjectScriptData->nativeObject);
int eventType = *((int*)(actionObjectScriptData->eventType));

auto iter = se::NativePtrToObjectMap::find(actionObject);
if (iter == se::NativePtrToObjectMap::end())
    return 0;

se::ScriptEngine::getInstance()->clearException();
se::AutoHandleScope hs;
se::Value seActionVal;
seActionVal.setObject(iter->second, true);

int ret = 0;

if (eventType == kActionUpdate)
{
    se::Value updateVal;
    if (seActionVal.toObject()->getProperty("update", &updateVal) && updateVal.isObject() && updateVal.toObject()->isFunction())
    {
        se::ValueArray args;
        args.push_back(se::Value(*((float *)actionObjectScriptData->param)));
        updateVal.toObject()->call(args, seActionVal.toObject());
    }
}

return ret;

}

我觉得分析这个代码可以解决的,这里actionObjectScriptData应该先判断是不是为空,seActionVal.toObject()的结果判断一下是不是有效就应该可以避免宕机了.

bool ScriptEngineManager::sendActionEventToJS(Action* actionObject, int eventType, void* param)
{
    auto scriptEngine = getInstance()->getScriptEngine();
    
    ActionObjectScriptData data(actionObject,(int*)&eventType, param); // 栈上的对象,肯定不为nullptr
    ScriptEvent scriptEvent(kScriptActionEvent,(void*)&data);
    if (scriptEngine->sendEvent(&scriptEvent))
        return true;

    return false;
}
se::ScriptEngine::getInstance()->clearException();
se::AutoHandleScope hs;
se::Value seActionVal;
seActionVal.setObject(iter->second, true); // 这里设置了Object,下面的toObject判断没有必要判断nullptr

但是看调用栈,就是宕机在这个位置,这里肯定是野指针或者空指针了.

这跟 JS 代码的逻辑和JSC 内部的实现有关系。需要复现方式才能修。

这里感觉出现野指针的可能姓比较大

现在这个怎么解决的呢

有需要有能复现的方法,或者比较容易复现的方法,这样才能分析问题出在哪里。

我这里也有这样的问题 但不是必崩溃 只是崩溃的次数比较多

次数比例?能出现也可以。比如10次,20次操作出现一次,这样也可以查。

概率比较高