Skip to content

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

堆栈分析定位:

image

最有可能的位置是这三个断言中的其中一个:
  • 1、listener 无效、野指针:

    • c 节点未创建、或已经移除,但仍尝试注册 listener;
  • 2、重复注册:

    • a. 我们没有直接调用 addEventListenerWithFixedPriority 的业务层逻辑;
    • b. 业务层能够触发间接调用 addEventListenerWithFixedPriority 接口不多,如点击事件:
  • 3、fixedPriority == 0:(根据地址偏移量初步推算,最有可能是这个断言)

    • a. 引擎内部接口,如 CCLabel 等,有明确 fixedPriority 实参,可以排除;
    • b. js 层的事件走的独立封装 EventDispatcher,不走 CCEventDispatcher
    • c. 需要传入自定义 priority 的接口不多,如点击事件:

    image

排查方向:

  • 1、找一下符号表,尝试用 addr2line 准确定位一下代码行,确定是那一个断言;

  • 2、检查最近有没有新增、变更的自定义点击事件

    • 检查注册时机,有必要的话延迟一帧;
    • 检查 exit 逻辑,避免内存泄露;
    • 添加保护逻辑、避免重复注册;

Released under the MIT License.