Q3`25-7.17闪退日志
cash 日志:
-------------------------------------
Translated Report (Full Report Below)
-------------------------------------
Incident Identifier: 13A1C08A-ECB8-4DEB-80B5-915432FD7757
CrashReporter Key: 31331f6ef408aa4c02bb5c76419a3160f1164a2b
Hardware Model: iPhone13,4
Process: OldVegasCasino [13358]
Path: /private/var/containers/Bundle/Application/D50E7309-9D13-4E72-9E14-17FB1F5ED956/OldVegasCasino.app/OldVegasCasino
Identifier: com.superant.classicvegasslots
Version: 73 (3.2.13)
Code Type: ARM-64 (Native)
Role: Foreground
Parent Process: launchd [1]
Coalition: com.superant.classicvegasslots [663]
Date/Time: 2025-07-16 18:30:32.6444 +0800
Launch Time: 2025-07-16 18:21:09.0222 +0800
OS Version: iPhone OS 18.5 (22F76)
Release Type: User
Baseband Version: 5.51.03
Report Version: 104
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Termination Reason: SIGNAL 6 Abort trap: 6
Terminating Process: OldVegasCasino [13358]
Triggered by Thread: 0
Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0 libsystem_kernel.dylib 0x1e717a1dc __pthread_kill + 8
1 libsystem_pthread.dylib 0x220667c60 pthread_kill + 268
2 libsystem_c.dylib 0x19df98360 __abort + 132
3 libsystem_c.dylib 0x19df982dc abort + 136
4 libsystem_c.dylib 0x19df977c4 __assert_rtn + 284
5 OldVegasCasino.debug.dylib 0x1028f0644 cocos2d::EventDispatcher::addEventListenerWithFixedPriority(cocos2d::EventListener*, int) + 292
6 OldVegasCasino.debug.dylib 0x102f27f54 js_cocos2dx_EventDispatcher_addEventListenerWithFixedPriority(JSContext*, unsigned int, JS::Value*) + 956
7 OldVegasCasino.debug.dylib 0x1033448d4 js::Invoke(JSContext*, JS::CallArgs, js::MaybeConstruct) + 360
8 OldVegasCasino.debug.dylib 0x10334079c Interpret(JSContext*, js::RunState&) + 28308
9 OldVegasCasino.debug.dylib 0x1033398d4 js::RunScript(JSContext*, js::RunState&) + 280
10 OldVegasCasino.debug.dylib 0x1033449e0 js::Invoke(JSContext*, JS::CallArgs, js::MaybeConstruct) + 628
11 OldVegasCasino.debug.dylib 0x103344d24 js::Invoke(JSContext*, JS::Value const&, JS::Value const&, unsigned int, JS::Value const*, JS::MutableHandle<JS::Value>) + 468
12 OldVegasCasino.debug.dylib 0x10325929c JS_CallFunctionValue(JSContext*, JS::Handle<JSObject*>, JS::Handle<JS::Value>, JS::HandleValueArray const&, JS::MutableHandle<JS::Value>) + 76
13 OldVegasCasino.debug.dylib 0x103175c1c ScriptingCore::executeFunctionWithOwner(JS::Value, char const*, JS::HandleValueArray const&, JS::MutableHandle<JS::Value>) + 388
14 OldVegasCasino.debug.dylib 0x10317724c ScriptingCore::executeFunctionWithOwner(JS::Value, char const*, unsigned int, JS::Value*, JS::MutableHandle<JS::Value>) + 112
15 OldVegasCasino.debug.dylib 0x10317741c ScriptingCore::handleNodeEvent(void*) + 448
16 OldVegasCasino.debug.dylib 0x103179910 ScriptingCore::sendEvent(cocos2d::ScriptEvent*) + 176
17 OldVegasCasino.debug.dylib 0x102929d34 cocos2d::ScriptEngineManager::sendNodeEventToJS(cocos2d::Node*, int) + 144
18 OldVegasCasino.debug.dylib 0x1025ca314 cocos2d::Node::onEnter() + 92
19 OldVegasCasino.debug.dylib 0x1025ca3e4 cocos2d::Node::onEnter() + 300
20 OldVegasCasino.debug.dylib 0x1025ca3e4 cocos2d::Node::onEnter() + 300
21 OldVegasCasino.debug.dylib 0x102e21ca0 js_cocos2dx_Node_onEnter(JSContext*, unsigned int, JS::Value*) + 384
22 OldVegasCasino.debug.dylib 0x1033448d4 js::Invoke(JSContext*, JS::CallArgs, js::MaybeConstruct) + 360
23 OldVegasCasino.debug.dylib 0x1032824a0 js_fun_apply(JSContext*, unsigned int, JS::Value*) + 892
24 OldVegasCasino.debug.dylib 0x1033448d4 js::Invoke(JSContext*, JS::CallArgs, js::MaybeConstruct) + 360
25 OldVegasCasino.debug.dylib 0x10334079c Interpret(JSContext*, js::RunState&) + 28308
26 OldVegasCasino.debug.dylib 0x1033398d4 js::RunScript(JSContext*, js::RunState&) + 280
27 OldVegasCasino.debug.dylib 0x1033449e0 js::Invoke(JSContext*, JS::CallArgs, js::MaybeConstruct) + 628
28 OldVegasCasino.debug.dylib 0x103344d24 js::Invoke(JSContext*, JS::Value const&, JS::Value const&, unsigned int, JS::Value const*, JS::MutableHandle<JS::Value>) + 468
29 OldVegasCasino.debug.dylib 0x10325929c JS_CallFunctionValue(JSContext*, JS::Handle<JSObject*>, JS::Handle<JS::Value>, JS::HandleValueArray const&, JS::MutableHandle<JS::Value>) + 76
30 OldVegasCasino.debug.dylib 0x103175c1c ScriptingCore::executeFunctionWithOwner(JS::Value, char const*, JS::HandleValueArray const&, JS::MutableHandle<JS::Value>) + 388
31 OldVegasCasino.debug.dylib 0x10317724c ScriptingCore::executeFunctionWithOwner(JS::Value, char const*, unsigned int, JS::Value*, JS::MutableHandle<JS::Value>) + 112
32 OldVegasCasino.debug.dylib 0x10317741c ScriptingCore::handleNodeEvent(void*) + 448
33 OldVegasCasino.debug.dylib 0x103179910 ScriptingCore::sendEvent(cocos2d::ScriptEvent*) + 176
34 OldVegasCasino.debug.dylib 0x102929d34 cocos2d::ScriptEngineManager::sendNodeEventToJS(cocos2d::Node*, int) + 144
35 OldVegasCasino.debug.dylib 0x1025ca314 cocos2d::Node::onEnter() + 92
36 OldVegasCasino.debug.dylib 0x1025ca3e4 cocos2d::Node::onEnter() + 300
37 OldVegasCasino.debug.dylib 0x1025ca3e4 cocos2d::Node::onEnter() + 300
38 OldVegasCasino.debug.dylib 0x1025c8eb0 cocos2d::Node::addChildHelper(cocos2d::Node*, int, int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, bool) + 360
39 OldVegasCasino.debug.dylib 0x1025c9090 cocos2d::Node::addChild(cocos2d::Node*, int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&) + 356
40 OldVegasCasino.debug.dylib 0x1025c9274 cocos2d::Node::addChild(cocos2d::Node*, int) + 204
41 OldVegasCasino.debug.dylib 0x102e7b224 js_cocos2dx_Node_addChild(JSContext*, unsigned int, JS::Value*) + 920
42 OldVegasCasino.debug.dylib 0x1033448d4 js::Invoke(JSContext*, JS::CallArgs, js::MaybeConstruct) + 360
43 OldVegasCasino.debug.dylib 0x10334079c Interpret(JSContext*, js::RunState&) + 28308
44 OldVegasCasino.debug.dylib 0x1033398d4 js::RunScript(JSContext*, js::RunState&) + 280
45 OldVegasCasino.debug.dylib 0x1033449e0 js::Invoke(JSContext*, JS::CallArgs, js::MaybeConstruct) + 628
46 OldVegasCasino.debug.dylib 0x103344d24 js::Invoke(JSContext*, JS::Value const&, JS::Value const&, unsigned int, JS::Value const*, JS::MutableHandle<JS::Value>) + 468
47 OldVegasCasino.debug.dylib 0x10325929c JS_CallFunctionValue(JSContext*, JS::Handle<JSObject*>, JS::Handle<JS::Value>, JS::HandleValueArray const&, JS::MutableHandle<JS::Value>) + 76
48 OldVegasCasino.debug.dylib 0x103175c1c ScriptingCore::executeFunctionWithOwner(JS::Value, char const*, JS::HandleValueArray const&, JS::MutableHandle<JS::Value>) + 388
49 OldVegasCasino.debug.dylib 0x103178d00 ScriptingCore::executeFunctionWithOwner(JS::Value, char const*, unsigned int, JS::Value*) + 144
50 OldVegasCasino.debug.dylib 0x102e1b420 JSScheduleWrapper::update(float) + 168
51 OldVegasCasino.debug.dylib 0x102e5568c void cocos2d::Scheduler::scheduleUpdate<JSScheduleWrapper>(JSScheduleWrapper*, int, bool)::'lambda'(float)::operator()(float) const + 36
52 OldVegasCasino.debug.dylib 0x102e5565c decltype(std::declval<JSScheduleWrapper>()(std::declval<float>())) std::__1::__invoke[abi:de180100]<void cocos2d::Scheduler::scheduleUpdate<JSScheduleWrapper>(JSScheduleWrapper*, int, bool)::'lambda'(float)&, float>(JSScheduleWrapper&&, float&&) + 36
53 OldVegasCasino.debug.dylib 0x102e55608 void std::__1::__invoke_void_return_wrapper<void, true>::__call[abi:de180100]<void cocos2d::Scheduler::scheduleUpdate<JSScheduleWrapper>(JSScheduleWrapper*, int, bool)::'lambda'(float)&, float>(void cocos2d::Scheduler::scheduleUpdate<JSScheduleWrapper>(JSScheduleWrapper*, int, bool)::'lambda'(float)&, float&&) + 32
54 OldVegasCasino.debug.dylib 0x102e555dc std::__1::__function::__alloc_func<void cocos2d::Scheduler::scheduleUpdate<JSScheduleWrapper>(JSScheduleWrapper*, int, bool)::'lambda'(float), std::__1::allocator<void cocos2d::Scheduler::scheduleUpdate<JSScheduleWrapper>(JSScheduleWrapper*, int, bool)::'lambda'(float)>, void (float)>::operator()[abi:de180100](float&&) + 36
55 OldVegasCasino.debug.dylib 0x102e54458 std::__1::__function::__func<void cocos2d::Scheduler::scheduleUpdate<JSScheduleWrapper>(JSScheduleWrapper*, int, bool)::'lambda'(float), std::__1::allocator<void cocos2d::Scheduler::scheduleUpdate<JSScheduleWrapper>(JSScheduleWrapper*, int, bool)::'lambda'(float)>, void (float)>::operator()(float&&) + 36
56 OldVegasCasino.debug.dylib 0x10253cea4 std::__1::__function::__value_func<void (float)>::operator()[abi:de180100](float&&) const + 76
57 OldVegasCasino.debug.dylib 0x10252d9f0 std::__1::function<void (float)>::operator()(float) const + 32
58 OldVegasCasino.debug.dylib 0x10253965c cocos2d::Scheduler::update(float) + 420
59 OldVegasCasino.debug.dylib 0x102575e04 cocos2d::Director::drawScene() + 136
60 OldVegasCasino.debug.dylib 0x10257a850 cocos2d::Director::mainLoop() + 108
61 OldVegasCasino.debug.dylib 0x10257a8a0 cocos2d::Director::mainLoop(float) + 44
62 OldVegasCasino.debug.dylib 0x1029bf80c -[CCDirectorCaller doCaller:] + 224
63 QuartzCore 0x197ad91d0 CA::Display::DisplayLinkItem::dispatch_(CA::SignPost::Interval<(CA::SignPost::CAEventCode)835322056>&) + 48
64 QuartzCore 0x197ad8dc8 CA::Display::DisplayLink::dispatch_items(unsigned long long, unsigned long long, unsigned long long) + 876
65 QuartzCore 0x197ad9364 CA::Display::DisplayLink::dispatch_deferred_display_links(unsigned int) + 360
66 UIKitCore 0x198849404 _UIUpdateSequenceRun + 84
67 UIKitCore 0x198848ab4 schedulerStepScheduledMainSection + 208
68 UIKitCore 0x1988441e4 runloopSourceCallback + 92
69 CoreFoundation 0x195f60a8c __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 28
70 CoreFoundation 0x195f608a4 __CFRunLoopDoSource0 + 172
71 CoreFoundation 0x195f60700 __CFRunLoopDoSources0 + 232
72 CoreFoundation 0x195f61080 __CFRunLoopRun + 840
73 CoreFoundation 0x195f62c3c CFRunLoopRunSpecific + 572
74 GraphicsServices 0x1e3141454 GSEventRunModal + 168
75 UIKitCore 0x198975274 -[UIApplication _run] + 816
76 UIKitCore 0x198940a28 UIApplicationMain + 336
77 OldVegasCasino.debug.dylib 0x1011e8cd8 __debug_main_executable_dylib_entry_point + 72
78 dyld 0x1bce37f08 start + 6040
堆栈分析定位:
最有可能的位置是这三个断言中的其中一个:
1、listener 无效、野指针:
- c 节点未创建、或已经移除,但仍尝试注册 listener;
2、重复注册:
- a. 我们没有直接调用 addEventListenerWithFixedPriority 的业务层逻辑;
- b. 业务层能够触发间接调用 addEventListenerWithFixedPriority 接口不多,如点击事件:
3、fixedPriority == 0:(根据地址偏移量初步推算,最有可能是这个断言)
- a. 引擎内部接口,如 CCLabel 等,有明确 fixedPriority 实参,可以排除;
- b. js 层的事件走的独立封装
EventDispatcher
,不走CCEventDispatcher
; - c. 需要传入自定义 priority 的接口不多,如点击事件:
排查方向:
1、找一下符号表,尝试用 addr2line 准确定位一下代码行,确定是那一个断言;
2、检查最近有没有新增、变更的自定义点击事件
- 检查注册时机,有必要的话延迟一帧;
- 检查 exit 逻辑,避免内存泄露;
- 添加保护逻辑、避免重复注册;