iOS CloudDocsLibrary 崩溃(可能是 KVO 崩溃)
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 分钟左右的时间内崩溃。这让我想到了一些基于块的 KVO AVPlayerItem 的状态 属性 是罪魁祸首。
我记得看到一位非常睿智的人引用了
的话
"Block-based KVO, it just works (until it doesn't)" - Anon
所以我将基于块的 KVO 切换为旧的回调样式,崩溃似乎已经消失了。
感叹
有没有其他人遇到过崩溃(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 分钟左右的时间内崩溃。这让我想到了一些基于块的 KVO AVPlayerItem 的状态 属性 是罪魁祸首。
我记得看到一位非常睿智的人引用了
的话"Block-based KVO, it just works (until it doesn't)" - Anon
所以我将基于块的 KVO 切换为旧的回调样式,崩溃似乎已经消失了。
感叹