简体   繁体   English

iOS CloudDocsLibrary 崩溃(可能是 KVO 崩溃)

[英]iOS CloudDocsLibrary crash (probably KVO crash)

Has anyone else experienced a crash (EXC_BAD_ACCESS) with the following stack trace:有没有其他人经历过以下堆栈跟踪的崩溃(EXC_BAD_ACCESS):

0 Object_isClass
22 UIApplicationMain
23 main
24 start

If I click on UIApplicationMain in the stack trace then I get the following:如果我在堆栈跟踪中单击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>

Looks like it's crashed trying to do some CloudKit stuff?看起来它在尝试做一些 CloudKit 的东西时崩溃了? Which is odd because we don't have any CloudKit things setup...这很奇怪,因为我们没有任何 CloudKit 东西设置......

I've only ever seen this crashing locally with this (when running through Xcode), not in our CI.我只见过这个在本地崩溃(通过 Xcode 运行时),而不是在我们的 CI 中。 We recently added some CoreData usage, could that be related in some way?我们最近添加了一些 CoreData 用法,这可能以某种方式相关吗?

It seems like the CloudKit stuff might be a red herring and really this is a KVO crash as when I run the 'bt' command in the console I get the backtrace including the following warning: KVO_IS_RETAINING_ALL_OBSERVERS_OF_THIS_OBJECT_IF_IT_CRASHES_AN_OBSERVER_WAS_OVERRELEASED_OR_SMASHED看起来 CloudKit 的东西可能是一个红鲱鱼,实际上这是一个 KVO 崩溃,因为当我在控制台中运行“bt”命令时,我得到了回溯,包括以下警告:KVO_IS_RETAINING_ALL_OBSERVERS_OF_THIS_OBJECT_IF_IT_CRASHES_AN_OBSERVER_WAS_OVERRELEASED_OR_SMASHED

I've been seeing this issue while trying to track down a KVO crash so that makes some sense... shame there's not more info in the stack!我在尝试追踪 KVO 崩溃时一直在看到这个问题,所以这很有意义……可惜堆栈中没有更多信息!

I still don't really know why this crash was happening but I've managed to get rid of it by changing some of the KVO setup.我仍然不知道为什么会发生这种崩溃,但我已经设法通过更改一些 KVO 设置来摆脱它。

To track down the problematic KVO I commented out various bits of KVO code and ran a custom test suite which would always crash within 30 minutes or so.为了追踪有问题的 KVO,我注释掉了各种 KVO 代码并运行了一个自定义测试套件,它总是会在 30 分钟左右内崩溃。 That lead me to some block-based KVO of AVPlayerItem's status property being the culprit.这导致我发现 AVPlayerItem 的 status 属性的一些基于块的 KVO 是罪魁祸首。

I remembered seeing a quote from someone very wise along the lines of我记得看到一个非常聪明的人的一句话

"Block-based KVO, it just works (until it doesn't)" - Anon “基于块的 KVO,它只是有效(直到它不起作用)” - Anon

So I switched the block-based KVO to the old callback style and the crash seems to have disappeared.所以我将基于块的 KVO 切换为旧的回调样式,崩溃似乎已经消失了。

sigh

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM