这么严重的问题都没人管了.
对于我来说没什么,是升级时碰到的,马上回退到了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次操作出现一次,这样也可以查。
概率比较高
