1 #00 pc 011a614c libcocos2djs.so _M_find_before_node (C:/Users/nantas/AppData/Local/Android/Sdk/ndk-bundle/build//…/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/hashtable.h:1448 [Inline: _M_bucket_index]) [armeabi-v6]
2 #01 pc 011aa55c libcocos2djs.so removeSchedule (C:/Users/nantas/AppData/Local/Android/Sdk/ndk-bundle/build//…/sources/cxx-stl/gnu-libstdc++/4.9/include/bits/hashtable_policy.h:1179 [Inline: operator()]) [armeabi-v6]
3 #02 pc 011aa814 libcocos2djs.so Scheduler_unscheduleCommon (C:/fb/cxp/cocos/scripting/js-bindings/proj.android/…/manual/jsb_node.cpp:865) [armeabi-v6]
4 #03 pc 011aad34 libcocos2djs.so js_cocos2dx_Scheduler_unscheduleRegistry (C:/fb/cxp/cocos/scripting/js-bindings/proj.android/…/manual/jsb_node.cpp:1295 [Inline: js_cocos2dx_Scheduler_unschedule]) [armeabi-v6]
5 #04 pc 0027814c libcocos2djs.so v8::internal::FunctionCallbackArguments::Call(void ()(v8::FunctionCallbackInfov8::Value const&)) [armeabi-v6]
6 #05 pc 002fad38 libcocos2djs.so v8::internal::MaybeHandlev8::internal::Object v8::internal::(anonymous namespace)::HandleApiCallHelper(v8::internal::Isolate, v8::internal::Handlev8::internal::HeapObject, v8::internal::Handlev8::internal::HeapObject, v8::internal::Handlev8::internal::FunctionTemplateInfo, v8::internal::Handlev8::internal::Object, v8::internal::BuiltinArguments) [armeabi-v6]
7 #06 pc 002fb160 libcocos2djs.so v8::internal::Builtin_Impl_HandleApiCall(v8::internal::BuiltinArguments, v8::internal::Isolate*) [armeabi-v6]
8 #07 pc 002fb494 libcocos2djs.so v8::internal::Builtin_HandleApiCall(int, v8::internal::Object**, v8::internal::Isolate*) [armeabi-v6]
9 #08 pc 00000098 [armeabi-v6]
10 java:
11 org.cocos2dx.lib.Cocos2dxRenderer.onDrawFrame(Cocos2dxRenderer.java:104)
12 android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1583)
13 android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1286)
莫有想法啊。
Google到相关的文章:
https://stackoverflow.com/questions/16353334/segv-in-gccs-stdunordered-map
但是我们并没有犯文章中说的错误。
看你的堆栈信息,应该是:
static void removeSchedule(uint32_t jsFuncId, uint32_t jsTargetId, bool needDetachChild)
{
auto funcObjKeyMapIter = __js_target_schedulekey_map.find(jsTargetId); // 这行出错了,但是这里理论上是不应该出错的。
if (funcObjKeyMapIter != __js_target_schedulekey_map.end())
{
auto& funcMap = funcObjKeyMapIter->second;
auto iter = funcMap.find(jsFuncId);
if (iter != funcMap.end())
{
se::Object* target = iter->second.getTarget();
se::Object* func = iter->second.getFunc();
if (needDetachChild)
{
target->detachObject(func);
}
func->decRef();
target->decRef();
funcMap.erase(iter);
}
if (funcMap.empty())
{
__js_target_schedulekey_map.erase(funcObjKeyMapIter);
}
}
}
跪求复现方法。