[英]iOS CloudDocsLibrary crash (probably KVO crash)
有没有其他人经历过以下堆栈跟踪的崩溃(EXC_BAD_ACCESS):
0 Object_isClass
22 UIApplicationMain
23 main
24 start
如果我在堆栈跟踪中单击UIApplicationMain
,则会得到以下信息:
UIKitCore`UIApplicationMain:
0x21a6ef8a4 <+0>: stp x24, x23, [sp, #-0x40]!
0x21a6ef8a8 <+4>: stp x22, x21, [sp, #0x10]
0x21a6ef8ac <+8>: stp x20, x19, [sp, #0x20]
0x21a6ef8b0 <+12>: stp x29, x30, [sp, #0x30]
0x21a6ef8b4 <+16>: add x29, sp, #0x30 ; =0x30
0x21a6ef8b8 <+20>: mov x20, x3
0x21a6ef8bc <+24>: mov x21, x1
0x21a6ef8c0 <+28>: mov x22, x0
0x21a6ef8c4 <+32>: mov x0, x2
0x21a6ef8c8 <+36>: bl 0x21ac17b68 ; symbol stub for: -[_UICloudSharingActivity _activitySupportsPromiseURLs]
0x21a6ef8cc <+40>: mov x19, x0
0x21a6ef8d0 <+44>: mov x0, x20
0x21a6ef8d4 <+48>: bl 0x21ac17b68 ; symbol stub for: -[_UICloudSharingActivity _activitySupportsPromiseURLs]
0x21a6ef8d8 <+52>: mov x20, x0
0x21a6ef8dc <+56>: mov w0, #0x168
0x21a6ef8e0 <+60>: movk w0, #0x2b87, lsl #16
0x21a6ef8e4 <+64>: mov w1, #0x32
0x21a6ef8e8 <+68>: mov x2, #0x0
0x21a6ef8ec <+72>: mov x3, #0x0
0x21a6ef8f0 <+76>: mov x4, #0x0
0x21a6ef8f4 <+80>: bl 0x21ac1779c ; symbol stub for: __66-[UICloudSharingController _deleteShareAfterDismissalWithoutSave:]_block_invoke_2
0x21a6ef8f8 <+84>: orr w0, wzr, #0x3
0x21a6ef8fc <+88>: orr w1, wzr, #0x3
0x21a6ef900 <+92>: mov x2, #-0x1
0x21a6ef904 <+96>: orr x4, xzr, #0x8000000000000000
0x21a6ef908 <+100>: mov w3, #0x0
0x21a6ef90c <+104>: bl 0x21ac175c8 ; symbol stub for: -[UIWebView webView:decidePolicyForNewWindowAction:request:newFrameName:decisionListener:]
0x21a6ef910 <+108>: adrp x23, 52595
0x21a6ef914 <+112>: ldr w8, [x23, #0x364]
0x21a6ef918 <+116>: cbz w8, 0x21a6ef9a0 ; <+252>
0x21a6ef91c <+120>: lsr w8, w8, #8
0x21a6ef920 <+124>: cmp w8, #0x201 ; =0x201
0x21a6ef924 <+128>: b.lo 0x21a6ef950 ; <+172>
0x21a6ef928 <+132>: bl 0x21ac17a48 ; symbol stub for: -[_UIShareParticipantDetails detailText]
0x21a6ef92c <+136>: mov x23, x0
0x21a6ef930 <+140>: mov x0, x22
0x21a6ef934 <+144>: mov x1, x21
0x21a6ef938 <+148>: mov x2, x19
0x21a6ef93c <+152>: mov x3, x20
0x21a6ef940 <+156>: bl 0x21a6ef9d0 ; _UIApplicationMainPreparations
0x21a6ef944 <+160>: mov x0, x23
0x21a6ef948 <+164>: bl 0x21ac17a3c ; symbol stub for: -[_UIShareParticipantDetails setParticipantID:]
0x21a6ef94c <+168>: b 0x21a6ef964 ; <+192>
0x21a6ef950 <+172>: mov x0, x22
0x21a6ef954 <+176>: mov x1, x21
0x21a6ef958 <+180>: mov x2, x19
0x21a6ef95c <+184>: mov x3, x20
0x21a6ef960 <+188>: bl 0x21a6ef9d0 ; _UIApplicationMainPreparations
0x21a6ef964 <+192>: adrp x8, 52595
0x21a6ef968 <+196>: ldr x0, [x8, #0x328]
0x21a6ef96c <+200>: adrp x8, 1577
0x21a6ef970 <+204>: add x1, x8, #0xad5 ; =0xad5
0x21a6ef974 <+208>: bl 0x21ac17b2c ; symbol stub for: CloudDocsLibrary
0x21a6ef978 <+212>: mov x0, x20 <--- Exception bad access code 1
0x21a6ef97c <+216>: bl 0x21ac17b5c ; symbol stub for: -[_UICloudSharingActivity _documentSharingControllerDidDismiss:]
0x21a6ef980 <+220>: mov x0, x19
0x21a6ef984 <+224>: bl 0x21ac17b5c ; symbol stub for: -[_UICloudSharingActivity _documentSharingControllerDidDismiss:]
0x21a6ef988 <+228>: mov w0, #0x0
0x21a6ef98c <+232>: ldp x29, x30, [sp, #0x30]
0x21a6ef990 <+236>: ldp x20, x19, [sp, #0x20]
0x21a6ef994 <+240>: ldp x22, x21, [sp, #0x10]
0x21a6ef998 <+244>: ldp x24, x23, [sp], #0x40
0x21a6ef99c <+248>: ret
0x21a6ef9a0 <+252>: adrp x8, 52593
0x21a6ef9a4 <+256>: ldr x8, [x8, #0xf40]
0x21a6ef9a8 <+260>: cmn x8, #0x1 ; =0x1
0x21a6ef9ac <+264>: b.ne 0x21a6ef9b8 ; <+276>
0x21a6ef9b0 <+268>: ldr w8, [x23, #0x364]
0x21a6ef9b4 <+272>: b 0x21a6ef91c ; <+120>
0x21a6ef9b8 <+276>: adrp x0, 52593
0x21a6ef9bc <+280>: add x0, x0, #0xf40 ; =0xf40
0x21a6ef9c0 <+284>: adrp x1, 41868
0x21a6ef9c4 <+288>: add x1, x1, #0x640 ; =0x640
0x21a6ef9c8 <+292>: bl 0x21ac17490 ; symbol stub for: -[UIWebView _webView:commitPreview:]
0x21a6ef9cc <+296>: b 0x21a6ef9b0 ; <+268>
看起来它在尝试做一些 CloudKit 的东西时崩溃了? 这很奇怪,因为我们没有任何 CloudKit 东西设置......
我只见过这个在本地崩溃(通过 Xcode 运行时),而不是在我们的 CI 中。 我们最近添加了一些 CoreData 用法,这可能以某种方式相关吗?
看起来 CloudKit 的东西可能是一个红鲱鱼,实际上这是一个 KVO 崩溃,因为当我在控制台中运行“bt”命令时,我得到了回溯,包括以下警告:KVO_IS_RETAINING_ALL_OBSERVERS_OF_THIS_OBJECT_IF_IT_CRASHES_AN_OBSERVER_WAS_OVERRELEASED_OR_SMASHED
我在尝试追踪 KVO 崩溃时一直在看到这个问题,所以这很有意义……可惜堆栈中没有更多信息!
我仍然不知道为什么会发生这种崩溃,但我已经设法通过更改一些 KVO 设置来摆脱它。
为了追踪有问题的 KVO,我注释掉了各种 KVO 代码并运行了一个自定义测试套件,它总是会在 30 分钟左右内崩溃。 这导致我发现 AVPlayerItem 的 status 属性的一些基于块的 KVO 是罪魁祸首。
我记得看到一个非常聪明的人的一句话
“基于块的 KVO,它只是有效(直到它不起作用)” - Anon
所以我将基于块的 KVO 切换为旧的回调样式,崩溃似乎已经消失了。
叹
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.