【问题标题】:iOS Crash Core Location CFBasicHashCreateCopy?iOS崩溃核心位置CFBasicHashCreateCopy?
【发布时间】:2014-08-07 21:55:12
【问题描述】:

我已经通过 Crashlytics 报告了这个问题,尽管我无法在本地复制它,所以除了下面的堆栈跟踪之外我没有什么可做的。不确定对 CoreLocation 的引用是否在堆栈跟踪与它有任何关系,但我不确定可能是什么原因。我的项目正在使用 ARC。有什么线索吗?

Thread : Crashed: com.apple.CoreLocation.ConnectionClient.0x14eb3510.events
0  CoreFoundation                 0x307769a8 CFBasicHashCreateCopy + 712
1  libobjc.A.dylib                0x3afd1a19 object_setClass + 24
2  CoreFoundation                 0x30782d0f CFDictionaryCreateMutableCopy + 154
3  CoreLocation                   0x30d0a8f3 CLLocationCoordinate2DGetDistanceFrom + 47590
4  CoreLocation                   0x30d2d607 CLClientCreateIso6709Notation + 49626
5  CoreFoundation                 0x30786d45 __CFDictionaryApplyFunction_block_invoke + 16
6  CoreFoundation                 0x30772cd4 CFBasicHashApply + 128
7  CoreFoundation                 0x3077be27 CFDictionaryApplyFunction + 154
8  CoreLocation                   0x30d2cc25 CLClientCreateIso6709Notation + 47096
9  CoreLocation                   0x30d2b625 CLClientCreateIso6709Notation + 41464
10 libxpc.dylib                   0x3b5fc3a9 _xpc_connection_call_event_handler + 40
11 libxpc.dylib                   0x3b5fee67 do_mach_notify_port_destroyed + 122
12 libxpc.dylib                   0x3b5fedd1 _Xmach_notify_port_destroyed + 104
13 libxpc.dylib                   0x3b5fed47 notify_server + 62
14 libxpc.dylib                   0x3b5fa9cf _xpc_connection_mach_event + 1926
15 libdispatch.dylib              0x3b4bdf43 _dispatch_mach_msg_invoke + 118
16 libdispatch.dylib              0x3b4c0c71 _dispatch_queue_drain + 412
17 libdispatch.dylib              0x3b4bda6b _dispatch_mach_invoke + 78
18 libdispatch.dylib              0x3b4c0c71 _dispatch_queue_drain + 412
19 libdispatch.dylib              0x3b4bdc6f _dispatch_queue_invoke + 42
20 libdispatch.dylib              0x3b4c0c71 _dispatch_queue_drain + 412
21 libdispatch.dylib              0x3b4bdc6f _dispatch_queue_invoke + 42
22 libdispatch.dylib              0x3b4c15f1 _dispatch_root_queue_drain + 76
23 libdispatch.dylib              0x3b4c18dd _dispatch_worker_thread2 + 56
24 libsystem_pthread.dylib        0x3b5ecc17 _pthread_wqthread + 298

这是另一个,可能是相关的。

Crashed: com.apple.CoreLocation.ConnectionClient.0x17665330.events
EXC_BAD_ACCESS KERN_INVALID_ADDRESS at 0x11755e44

Thread : Crashed: com.apple.CoreLocation.ConnectionClient.0x17665330.events
0  libobjc.A.dylib                0x381db626 objc_msgSend + 5
1  CoreFoundation                 0x2d979d75 CFDictionaryCreateMutableCopy + 320
2  CoreLocation                   0x2df018f3 (null) + 47590
3  CoreLocation                   0x2df24607 (null) + 49626
4  CoreFoundation                 0x2d97dd05 __CFDictionaryApplyFunction_block_invoke + 16
5  CoreFoundation                 0x2d969c94 CFBasicHashApply + 128
6  CoreFoundation                 0x2d972de7 CFDictionaryApplyFunction + 154
7  CoreLocation                   0x2df23c25 (null) + 47096
8  CoreLocation                   0x2df22625 (null) + 41464
9  libxpc.dylib                   0x387fb3a9 _xpc_connection_call_event_handler + 40
10 libxpc.dylib                   0x387fde67 do_mach_notify_port_destroyed + 122
11 libxpc.dylib                   0x387fddd1 _Xmach_notify_port_destroyed + 104
12 libxpc.dylib                   0x387fdd47 notify_server + 62
13 libxpc.dylib                   0x387f99cf _xpc_connection_mach_event + 1926
14 libdispatch.dylib              0x386bcf43 _dispatch_mach_msg_invoke + 118
15 libdispatch.dylib              0x386bfc71 _dispatch_queue_drain + 412
16 libdispatch.dylib              0x386bca6b _dispatch_mach_invoke + 78
17 libdispatch.dylib              0x386bfc71 _dispatch_queue_drain + 412
18 libdispatch.dylib              0x386bcc6f _dispatch_queue_invoke + 42
19 libdispatch.dylib              0x386bfc71 _dispatch_queue_drain + 412
20 libdispatch.dylib              0x386bcc6f _dispatch_queue_invoke + 42
21 libdispatch.dylib              0x386c05f1 _dispatch_root_queue_drain + 76
22 libdispatch.dylib              0x386c08dd _dispatch_worker_thread2 + 56
23 libsystem_pthread.dylib        0x387ebc17 _pthread_wqthread + 298

【问题讨论】:

  • 我也遇到了完全一样的问题,实在找不到问题,你终于找到源了吗?
  • 很遗憾从来没有。

标签: ios crash core-location core-foundation


【解决方案1】:

您已让系统将消息发送到对象本应位于的错误内存位置。所以我的建议是启用僵尸检测(编辑方案,然后选择诊断选项卡,勾选启用僵尸对象)并重新执行您的测试场景,特别是导致 CoreLocation 事件的任何事情。

然后当核心位置向已释放的对象发送消息时,您将知道该对象最初是什么被释放的(因为它被此调试设置人为地保持为僵尸对象)。

【讨论】:

  • 这很容易做到,不幸的是这里的问题是这是一个不常见的错误,我只在拥有数万用户的发布版本中通过 crashlytics 看到过。我一直无法在本地复制它。
  • 很公平。虽然不是一条容易的路,但一种方法是让问题更频繁地出现。本质上,由于 CoreLocation 事件,您在代码中设置断点并尝试用例以查找哪些可以触发它们,例如禁用应用程序的位置跟踪,或者可能只是后台/前台等。然后编写自动重复这些步骤的测试代码,然后让它以不同的组合重复运行。让问题更加暴露可以提供洞察力,并可以提供运行时数据来解决问题。
  • 你认为这与可变字典有关吗?
  • 可变性是代码验证的一个关键方面,因此您可以走在正确的轨道上。重新使用或重新利用传入字典的对象,或在使用字典的回调之前更改字典可能会导致不变性问题(假设为真但不成立的事情)。寿命是另一个问题。是任何对象的生命周期,它与何时使用它是脱节的,因此它可能是生命周期的结束,然后被使用。
  • 对于它的价值,我通过 Crashlytics 在我的项目中看到了同样的事情。它只影响极少数用户,而且每个用户似乎不会发生超过一次.... Apple 错误?
猜你喜欢
  • 1970-01-01
  • 2014-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多