我现在的程序,在Android和Windows平台上都比较表现良好,非常稳定,但在IOS平台上,各种崩溃,比较多的是在Action方面和一些回调脚本函数方面。看似很像JSC的GC的问题导致。你们有没有碰到过这样的情况?这怎么解决呢?
堆栈信息发来看看。
0 JavaScriptCore long long JSC::APICallbackFunction::call<JSC::JSCallbackFunction>(JSC::ExecState*) + 632
1 JavaScriptCore long long JSC::APICallbackFunction::call<JSC::JSCallbackFunction>(JSC::ExecState*) + 468
2 JavaScriptCore JSC::LLInt::setUpCall(JSC::ExecState*, JSC::Instruction*, JSC::CodeSpecializationKind, JSC::JSValue, JSC::LLIntCallLinkInfo*) + 456
3 JavaScriptCore _llint_entry + 26392
4 JavaScriptCore _llint_entry + 26408
5 JavaScriptCore _llint_entry + 26408
6 JavaScriptCore _llint_entry + 26408
7 JavaScriptCore _llint_entry + 26408
8 JavaScriptCore _llint_entry + 26408
9 JavaScriptCore _llint_entry + 26408
10 JavaScriptCore _llint_entry + 26408
11 JavaScriptCore _llint_entry + 26308
12 JavaScriptCore _llint_entry + 26308
13 JavaScriptCore _llint_entry + 26408
14 JavaScriptCore _llint_entry + 26408
15 JavaScriptCore _llint_entry + 26308
16 JavaScriptCore _llint_entry + 26308
17 JavaScriptCore void WTF::dataLog<char [36], JSC::PropertyName, char [30]>(char const (&) [36], JSC::PropertyName const&, char const (&) [30]) + 436
18 JavaScriptCore JSC::JITCode::execute(JSC::VM*, JSC::ProtoCallFrame*) + 164
19 JavaScriptCore JSC::Interpreter::executeCall(JSC::ExecState*, JSC::JSObject*, JSC::CallType, JSC::CallData const&, JSC::JSValue, JSC::ArgList const&) + 416
20 JavaScriptCore JSC::profiledCall(JSC::ExecState*, JSC::ProfilingReason, JSC::JSValue, JSC::CallType, JSC::CallData const&, JSC::JSValue, JSC::ArgList const&) + 164
21 JavaScriptCore JSObjectCallAsFunction + 636
22 WinningSlots-mobile se::Object::call(std::__1::vector<se::Value, std::__1::allocator<se::Value> > const&, se::Object*, se::Value*) + 168
23 WinningSlots-mobile _ZNSt3__110__function6__funcIZL29js_EventListenerCustom_createRN2se5StateEE4$_17NS_9allocatorIS5_EEFvPN7cocos2d11EventCustomEEEclEOSA_ + 680
24 WinningSlots-mobile std::__1::function<void (cocos2d::EventCustom*)>::operator()(cocos2d::EventCustom*) const + 40
25 WinningSlots-mobile std::__1::function<void (cocos2d::Event*)>::operator()(cocos2d::Event*) const + 40
26 WinningSlots-mobile _ZNSt3__110__function6__funcIZN7cocos2d15EventDispatcher13dispatchEventEPNS2_5EventEE3$_2NS_9allocatorIS6_EEFbPNS2_13EventListenerEEEclEOSA_ + 52
27 WinningSlots-mobile std::__1::function<bool (cocos2d::EventListener*)>::operator()(cocos2d::EventListener*) const + 40
28 WinningSlots-mobile cocos2d::EventDispatcher::dispatchEventToListeners(cocos2d::EventDispatcher::EventListenerVector*, std::__1::function<bool (cocos2d::EventListener*)> const&) + 292
29 WinningSlots-mobile cocos2d::EventDispatcher::dispatchEvent(cocos2d::Event*) + 200
30 WinningSlots-mobile cocos2d::Director::drawScene() + 60
31 WinningSlots-mobile cocos2d::Director::mainLoop() + 56
32 QuartzCore CA::Display::DisplayLinkItem::dispatch(unsigned long long) + 44
33 QuartzCore CA::Display::DisplayLink::dispatch_items(unsigned long long, unsigned long long, unsigned long long) + 436
34 IOKit IODispatchCalloutFromCFMessage + 372
35 CoreFoundation ___CFMachPortPerform + 180
36 CoreFoundation ___CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 56
37 CoreFoundation ___CFRunLoopDoSource1 + 436
38 CoreFoundation ___CFRunLoopRun + 1752
39 CoreFoundation CFRunLoopRunSpecific + 424
40 GraphicsServices GSEventRunModal + 100
41 UIKit UIApplicationMain + 208
42 WinningSlots-mobile main (main.m:8)
43 libdyld.dylib _start + 4
和dispatchEvent
相关的崩溃很多,原因一直不明
0 libsystem_kernel.dylib 0x00000001830600f0 __psynch_cvwait
1 libsystem_pthread.dylib 0x0000000183176ce4 __pthread_cond_wait$VARIANT$mp
2 JavaScriptCore 0x0000000189f1e0dc WTF::ThreadCondition::timedWait(WTF::Mutex&, double)
3 JavaScriptCore 0x000000018a89e33c WTF::ParkingLot::parkConditionallyImpl(void const*, WTF::ScopedLambda<bool ()> const&, WTF::ScopedLambda<void ()> const&, WTF::TimeWithDynamicClockType const&)
4 JavaScriptCore 0x000000018a4c2ea8 JSC::Heap::acquireAccessSlow()
5 JavaScriptCore 0x000000018a5e11dc JSC::JSLock::didAcquireLock()
6 JavaScriptCore 0x0000000189f38f7c JSC::JSLockHolder::JSLockHolder(JSC::ExecState*)
7 JavaScriptCore 0x0000000189f4f2ec JSObjectMake
8 WinningSlots-mobile 0x00000001049c9994 se::Object::createObjectWithClass(se::Class*)
9 WinningSlots-mobile 0x0000000104a92f30 js_cocos2dx_SpriteFrame_constructorRegistry(OpaqueJSContext const*, OpaqueJSValue*, unsigned long, OpaqueJSValue const* const*, OpaqueJSValue const**)
10 JavaScriptCore 0x000000018a5a5a30 long long JSC::APICallbackFunction::construct<JSC::JSCallbackConstructor>(JSC::ExecState*)
11 JavaScriptCore 0x0000000189f4d464 JSC::LLInt::setUpCall(JSC::ExecState*, JSC::Instruction*, JSC::CodeSpecializationKind, JSC::JSValue, JSC::LLIntCallLinkInfo*)
12 JavaScriptCore 0x000000018a694800 _llint_entry
13 JavaScriptCore 0x000000018a6943f0 _llint_entry
14 JavaScriptCore 0x000000018a6943f0 _llint_entry
15 JavaScriptCore 0x000000018a6943f0 _llint_entry
16 JavaScriptCore 0x000000018a6943f0 _llint_entry
17 JavaScriptCore 0x000000018a6943f0 _llint_entry
18 JavaScriptCore 0x000000018a6943f0 _llint_entry
19 JavaScriptCore 0x000000018a694454 _llint_entry
20 JavaScriptCore 0x000000018a694454 _llint_entry
21 JavaScriptCore 0x000000018a694454 _llint_entry
22 JavaScriptCore 0x000000018a694454 _llint_entry
23 JavaScriptCore 0x000000018a694454 _llint_entry
24 JavaScriptCore 0x000000018a694454 _llint_entry
25 JavaScriptCore 0x000000018a6943f0 _llint_entry
26 JavaScriptCore 0x000000018a6943f0 _llint_entry
27 JavaScriptCore 0x000000018a68d900 _vmEntryToJavaScript
28 JavaScriptCore 0x000000018a56c170 JSC::JITCode::execute(JSC::VM*, JSC::ProtoCallFrame*)
29 JavaScriptCore 0x0000000189f51294 JSC::Interpreter::executeCall(JSC::ExecState*, JSC::JSObject*, JSC::CallType, JSC::CallData const&, JSC::JSValue, JSC::ArgList const&)
30 JavaScriptCore 0x000000018a1b52e4 JSC::profiledCall(JSC::ExecState*, JSC::ProfilingReason, JSC::JSValue, JSC::CallType, JSC::CallData const&, JSC::JSValue, JSC::ArgList const&)
31 JavaScriptCore 0x0000000189f51044 JSObjectCallAsFunction
32 WinningSlots-mobile 0x00000001049c9278 se::Object::call(std::__1::vector<se::Value, std::__1::allocator<se::Value> > const&, se::Object*, se::Value*)
33 WinningSlots-mobile 0x00000001049d7460 _ZNSt3__110__function6__funcIZL29js_EventListenerCustom_createRN2se5StateEE4$_17NS_9allocatorIS5_EEFvPN7cocos2d11EventCustomEEEclEOSA_
34 WinningSlots-mobile 0x0000000104c46220 std::__1::function<void (cocos2d::EventCustom*)>::operator()(cocos2d::EventCustom*) const
35 WinningSlots-mobile 0x0000000104c4d818 std::__1::function<void (cocos2d::Event*)>::operator()(cocos2d::Event*) const
36 WinningSlots-mobile 0x0000000104c4d778 _ZNSt3__110__function6__funcIZN7cocos2d15EventDispatcher13dispatchEventEPNS2_5EventEE3$_2NS_9allocatorIS6_EEFbPNS2_13EventListenerEEEclEOSA_
37 WinningSlots-mobile 0x0000000104c49714 std::__1::function<bool (cocos2d::EventListener*)>::operator()(cocos2d::EventListener*) const
38 WinningSlots-mobile 0x0000000104c496ac cocos2d::EventDispatcher::dispatchEventToListeners(cocos2d::EventDispatcher::EventListenerVector*, std::__1::function<bool (cocos2d::EventListener*)> const&)
39 WinningSlots-mobile 0x0000000104c49814 cocos2d::EventDispatcher::dispatchEvent(cocos2d::Event*)
40 WinningSlots-mobile 0x0000000104ba081c cocos2d::Director::drawScene()
41 WinningSlots-mobile 0x0000000104ba2538 cocos2d::Director::mainLoop()
42 QuartzCore 0x000000018747964c CA::Display::DisplayLink::dispatch_items(unsigned long long, unsigned long long, unsigned long long)
43 IOKit 0x00000001837b6098 IODispatchCalloutFromCFMessage
44 CoreFoundation 0x00000001834d9090 ___CFMachPortPerform
45 CoreFoundation 0x00000001834f3e00 ___CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__
46 CoreFoundation 0x00000001834f3504 ___CFRunLoopDoSource1
47 CoreFoundation 0x00000001834f0fd8 ___CFRunLoopRun
48 CoreFoundation 0x0000000183410c58 CFRunLoopRunSpecific
49 GraphicsServices 0x00000001852bcf84 GSEventRunModal
50 UIKit 0x000000018cb695c4 UIApplicationMain
51 WinningSlots-mobile 0x00000001048a9f2c main (main.m:8)
52 libdyld.dylib 0x0000000182f3056c _start
这个崩溃有1000多次。。。
还要音效的
0 WinningSlots-mobile std::__1::__hash_table<std::__1::__hash_value_type<int, cocos2d::experimental::AudioPlayer*>, std::__1::__unordered_map_hasher<int, std::__1::__hash_value_type<int, cocos2d::experimental::AudioPlayer*>, std::__1::hash<int>, true>, std::__1::__unordered_map_equal<int, std::__1::__hash_value_type<int, cocos2d::experimental::AudioPlayer*>, std::__1::equal_to<int>, true>, std::__1::allocator<std::__1::__hash_value_type<int, cocos2d::experimental::AudioPlayer*> > >::remove(std::__1::__hash_const_iterator<std::__1::__hash_node<std::__1::__hash_value_type<int, cocos2d::experimental::AudioPlayer*>, void*>*>) + 56
1 WinningSlots-mobile std::__1::__hash_table<std::__1::__hash_value_type<int, cocos2d::experimental::AudioPlayer*>, std::__1::__unordered_map_hasher<int, std::__1::__hash_value_type<int, cocos2d::experimental::AudioPlayer*>, std::__1::hash<int>, true>, std::__1::__unordered_map_equal<int, std::__1::__hash_value_type<int, cocos2d::experimental::AudioPlayer*>, std::__1::equal_to<int>, true>, std::__1::allocator<std::__1::__hash_value_type<int, cocos2d::experimental::AudioPlayer*> > >::erase(std::__1::__hash_const_iterator<std::__1::__hash_node<std::__1::__hash_value_type<int, cocos2d::experimental::AudioPlayer*>, void*>*>) + 28
2 WinningSlots-mobile cocos2d::experimental::AudioEngineImpl::update(float) + 136
3 WinningSlots-mobile cocos2d::Timer::update(float) + 196
4 WinningSlots-mobile cocos2d::Scheduler::update(float) + 280
5 WinningSlots-mobile cocos2d::Director::drawScene() + 72
6 WinningSlots-mobile cocos2d::Director::mainLoop() + 56
7 QuartzCore CA::Display::DisplayLink::dispatch_items(unsigned long long, unsigned long long, unsigned long long) + 672
8 QuartzCore display_timer_callback(__CFMachPort*, void*, long, void*) + 240
9 CoreFoundation ___CFMachPortPerform + 188
10 CoreFoundation ___CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 56
11 CoreFoundation ___CFRunLoopDoSource1 + 440
12 CoreFoundation ___CFRunLoopRun + 2196
13 CoreFoundation CFRunLoopRunSpecific + 436
14 GraphicsServices GSEventRunModal + 100
15 UIKit UIApplicationMain + 236
16 WinningSlots-mobile main (main.m:8)
17 libdyld.dylib _start + 4
我再找找看栈信息,还碰到过JavaScriptCore子线程的Mark崩溃,都是很怪异的。我后来换成SpiderMonkey, 也比较稳定,但性能不行啊。
还有一处
Thread 1 Queue : com.apple.main-thread (serial)
#0 0x00000001854083cc in JSC::speculationFromCell(JSC::JSCell*) ()
#1 0x00000001851926f0 in JSC::CodeBlock::updateAllPredictionsAndCountLiveness(unsigned int&, unsigned int&) ()
#2 0x00000001850d0ba4 in JSC::CodeBlock::stronglyVisitStrongReferences(JSC::SlotVisitor&) ()
#3 0x00000001850d0340 in JSC::CodeBlock::visitAggregate(JSC::SlotVisitor&) ()
#4 0x00000001850cfcd0 in JSC::FunctionExecutable::visitChildren(JSC::JSCell*, JSC::SlotVisitor&) ()
#5 0x000000018500f0b8 in JSC::SlotVisitor::drain() ()
#6 0x00000001852b65b4 in JSC::Heap::markRoots(double) ()
#7 0x00000001852b8100 in JSC::Heap::collect(JSC::HeapOperation) ()
#8 0x00000001851a94d8 in JSC::GCActivityCallback::doWork() ()
#9 0x000000018500d624 in JSC::HeapTimer::timerDidFire(__CFRunLoopTimer*, void*) ()
#10 0x0000000183b0ec20 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ ()
#11 0x0000000183b0e8d0 in __CFRunLoopDoTimer ()
#12 0x0000000183b0c31c in __CFRunLoopRun ()
#13 0x0000000183a391f4 in CFRunLoopRunSpecific ()
#14 0x000000018ce5b6fc in GSEventRunModal ()
#15 0x00000001883ca10c in UIApplicationMain ()
#16 0x00000001000d5ec0 in main at /Users/liujun/Projects/Chariot/ChariotClient/frameworks/runtime-src/proj.ios_mac/ios/main.m:8
#17 0x00000001951b2a08 in start ()
一处
#0 0x000000018530d75c in long long JSC::APICallbackFunction::call<JSC::JSCallbackFunction>(JSC::ExecState*) ()
#1 0x0000000185054fbc in JSC::LLInt::setUpCall(JSC::ExecState*, JSC::Instruction*, JSC::CodeSpecializationKind, JSC::JSValue, JSC::LLIntCallLinkInfo*) ()
#2 0x0000000185385fd0 in llint_entry ()
#3 0x0000000185385f78 in llint_entry ()
#4 0x0000000185385f78 in llint_entry ()
#5 0x0000000185385fdc in llint_entry ()
#6 0x0000000185385fdc in llint_entry ()
#7 0x0000000185385f78 in llint_entry ()
#8 0x0000000185385f78 in llint_entry ()
#9 0x000000018537fd74 in callToJavaScript ()
#10 0x00000001852ee3d8 in JSC::JITCode::execute(JSC::VM*, JSC::ProtoCallFrame*) ()
#11 0x00000001850594d8 in JSC::Interpreter::executeCall(JSC::ExecState*, JSC::JSObject*, JSC::CallType, JSC::CallData const&, JSC::JSValue, JSC::ArgList const&) ()
#12 0x000000018513066c in JSC::boundFunctionCall(JSC::ExecState*) ()
#13 0x000000018537fefc in callToNativeFunction ()
#14 0x000000018505951c in JSC::Interpreter::executeCall(JSC::ExecState*, JSC::JSObject*, JSC::CallType, JSC::CallData const&, JSC::JSValue, JSC::ArgList const&) ()
#15 0x0000000185059264 in JSObjectCallAsFunction ()
#16 0x00000001001040a8 in se::Object::call(std::__1::vector<se::Value, std::__1::allocator<se::Value> > const&, se::Object*, se::Value*) at /Users/liujun/Projects/Chariot/ChariotClient/frameworks/cocos2d-x/cocos/scripting/js-bindings/jswrapper/jsc/Object.cpp:536
#17 0x0000000100141588 in js_cocos2dx_CallFunc_init(cocos2d::CallFuncN*, se::Object*, std::__1::vector<se::Value, std::__1::allocator<se::Value> > const&)::$_18::operator()(cocos2d::Node*) const at /Users/liujun/Projects/Chariot/ChariotClient/frameworks/cocos2d-x/cocos/scripting/js-bindings/manual/jsb_cocos2dx_manual.cpp:1529
#18 0x00000001001410a4 in decltype(std::__1::forward<js_cocos2dx_CallFunc_init(cocos2d::CallFuncN*, se::Object*, std::__1::vector<se::Value, std::__1::allocator<se::Value> > const&)::$_18&>(fp)(std::__1::forward<cocos2d::Node*>(fp0))) std::__1::__invoke<js_cocos2dx_CallFunc_init(cocos2d::CallFuncN*, se::Object*, std::__1::vector<se::Value, std::__1::allocator<se::Value> > const&)::$_18&, cocos2d::Node*>(js_cocos2dx_CallFunc_init(cocos2d::CallFuncN*, se::Object*, std::__1::vector<se::Value, std::__1::allocator<se::Value> > const&)::$_18&&&, cocos2d::Node*&&) [inlined] at /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/type_traits:4291
#19 0x0000000100141084 in void std::__1::__invoke_void_return_wrapper<void>::__call<js_cocos2dx_CallFunc_init(cocos2d::CallFuncN*, se::Object*, std::__1::vector<se::Value, std::__1::allocator<se::Value> > const&)::$_18&, cocos2d::Node*>(js_cocos2dx_CallFunc_init(cocos2d::CallFuncN*, se::Object*, std::__1::vector<se::Value, std::__1::allocator<se::Value> > const&)::$_18&&&, cocos2d::Node*&&) at /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/__functional_base:359
#20 0x0000000100140bbc in std::__1::__function::__func<js_cocos2dx_CallFunc_init(cocos2d::CallFuncN*, se::Object*, std::__1::vector<se::Value, std::__1::allocator<se::Value> > const&)::$_18, std::__1::allocator<js_cocos2dx_CallFunc_init(cocos2d::CallFuncN*, se::Object*, std::__1::vector<se::Value, std::__1::allocator<se::Value> > const&)::$_18>, void (cocos2d::Node*)>::operator()(cocos2d::Node*&&) at /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:1552
#21 0x00000001009dd13c in std::__1::function<void (cocos2d::Node*)>::operator()(cocos2d::Node*) const at /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:1903
#22 0x00000001009dd094 in cocos2d::CallFuncN::execute() at /Users/liujun/Projects/Chariot/ChariotClient/frameworks/cocos2d-x/cocos/2d/CCActionInstant.cpp:400
#23 0x00000001009dceb4 in cocos2d::CallFunc::update(float) at /Users/liujun/Projects/Chariot/ChariotClient/frameworks/cocos2d-x/cocos/2d/CCActionInstant.cpp:368
#24 0x0000000100a4a624 in cocos2d::Sequence::update(float) at /Users/liujun/Projects/Chariot/ChariotClient/frameworks/cocos2d-x/cocos/2d/CCActionInterval.cpp:433
#25 0x0000000100a4a49c in cocos2d::Sequence::update(float) at /Users/liujun/Projects/Chariot/ChariotClient/frameworks/cocos2d-x/cocos/2d/CCActionInterval.cpp:406
#26 0x0000000100a49464 in cocos2d::ActionInterval::step(float) at /Users/liujun/Projects/Chariot/ChariotClient/frameworks/cocos2d-x/cocos/2d/CCActionInterval.cpp:140
#27 0x0000000100a5d6f8 in cocos2d::ActionManager::update(float) at /Users/liujun/Projects/Chariot/ChariotClient/frameworks/cocos2d-x/cocos/2d/CCActionManager.cpp:454
#28 0x0000000100a2707c in void cocos2d::Scheduler::scheduleUpdate<cocos2d::ActionManager>(cocos2d::ActionManager*, int, bool)::'lambda'(float)::operator()(float) const at /Users/liujun/Projects/Chariot/ChariotClient/frameworks/cocos2d-x/build/../cocos/base/CCScheduler.h:287
#29 0x0000000100a2704c in decltype(std::__1::forward<cocos2d::ActionManager>(fp)(std::__1::forward<float>(fp0))) std::__1::__invoke<void cocos2d::Scheduler::scheduleUpdate<cocos2d::ActionManager>(cocos2d::ActionManager*, int, bool)::'lambda'(float)&, float>(cocos2d::ActionManager&&, float&&) [inlined] at /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/type_traits:4291
#30 0x0000000100a2702c in void std::__1::__invoke_void_return_wrapper<void>::__call<void cocos2d::Scheduler::scheduleUpdate<cocos2d::ActionManager>(cocos2d::ActionManager*, int, bool)::'lambda'(float)&, float>(void cocos2d::Scheduler::scheduleUpdate<cocos2d::ActionManager>(cocos2d::ActionManager*, int, bool)::'lambda'(float)&&&, float&&) at /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/__functional_base:359
#31 0x0000000100a26ea8 in std::__1::__function::__func<void cocos2d::Scheduler::scheduleUpdate<cocos2d::ActionManager>(cocos2d::ActionManager*, int, bool)::'lambda'(float), std::__1::allocator<void cocos2d::Scheduler::scheduleUpdate<cocos2d::ActionManager>(cocos2d::ActionManager*, int, bool)::'lambda'(float)>, void (float)>::operator()(float&&) at /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:1552
#32 0x00000001009bc358 in std::__1::function<void (float)>::operator()(float) const at /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:1903
#33 0x00000001009c8a68 in cocos2d::Scheduler::update(float) at /Users/liujun/Projects/Chariot/ChariotClient/frameworks/cocos2d-x/cocos/base/CCScheduler.cpp:843
#34 0x0000000100a1fb2c in cocos2d::Director::drawScene() at /Users/liujun/Projects/Chariot/ChariotClient/frameworks/cocos2d-x/cocos/base/CCDirector.cpp:312
#35 0x0000000100a246c0 in cocos2d::Director::mainLoop() at /Users/liujun/Projects/Chariot/ChariotClient/frameworks/cocos2d-x/cocos/base/CCDirector.cpp:1457
#36 0x0000000100ea8690 in ::-[CCDirectorCaller doCaller:](id) at /Users/liujun/Projects/Chariot/ChariotClient/frameworks/cocos2d-x/cocos/platform/ios/CCDirectorCaller-ios.mm:138
#37 0x0000000187d05094 in CA::Display::DisplayLinkItem::dispatch() ()
#38 0x0000000187d04f2c in CA::Display::DisplayLink::dispatch_items(unsigned long long, unsigned long long, unsigned long long) ()
#39 0x0000000184ced510 in IODispatchCalloutFromCFMessage ()
#40 0x0000000183af98dc in __CFMachPortPerform ()
#41 0x0000000183b0e548 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ ()
#42 0x0000000183b0e4a8 in __CFRunLoopDoSource1 ()
#43 0x0000000183b0c428 in __CFRunLoopRun ()
#44 0x0000000183a391f4 in CFRunLoopRunSpecific ()
#45 0x000000018ce5b6fc in GSEventRunModal ()
#46 0x00000001883ca10c in UIApplicationMain ()
#47 0x00000001000f9ec0 in main at /Users/liujun/Projects/Chariot/ChariotClient/frameworks/runtime-src/proj.ios_mac/ios/main.m:8
#48 0x00000001951b2a08 in start ()
后面会修复的
是不是说IOS上还不稳定?我想知道现状,免得瞎折腾。
算了,我还是先换SpiderMonkey吧,速度勉强可以接受。等IOS上的jsc的适配稳定下来再换。
奇怪,为何我发现在IOS上,我的应用,SpiderMonkey的运行比JSC快不少,这啥情况?
每个JS VM的优势不太一样,比如SpiderMonkey对native绑定的api调用速度就比jsc,v8块,而ios上jsc的js代码执行速度比SpiderMonkey快很多。
你确定是用了1.8.2版本?1.8.2是有修复 callfunc的问题的。这个有没有复现方法?
能否提供复现方式?目前静态分析很难定位到为题。
你用的版本也是1.8.2么?
我用的是1.8.2 不过我改动了不少代码。
算了,我自己分析吧,估计我改出来的问题。
复现问题太难了,工程太大。
恩,是182正式版的,这个在我这儿也不是必现,偶尔一两次联机调试的时候会发生,我也找不到一点头绪,但Android版确意外的稳定,唯一能确认的就是JSC环境的问题。主要是崩溃发生时,不知道运行了哪段js代码,如果能在引擎层面提供这些信息,我觉得调试就很方便了
不过现在发现,SpiderMonkey和JSC的性能,有时候还不一样,有时sm快,有时jsc快。不过整体上来看,jsc相对平稳,而spidermonkey在长时间运行后,会变慢,可能和GC的累积有关系。
是的,v8和jsc的gc性能是最好的,jsc的gc敏感度非常高,目前对引擎的绑定属于引擎接口的高级绑定,接口复杂度特别高,绑定代码哪里有一点考虑的不周全的地方就有可能在jsc上概率出现问题,而其他js引擎由于相对迟钝,特别是SpiderMonkey,所以比较难出现问题。这也解释了为什么1.6中没有出现的问题,在1.7以上版本ios比较容易概率的出现。这块后续会把绑定层级降低到渲染层面,最大可能降低复杂的绑定关系。