iOS 在 CoreLocation 崩溃

Posted

技术标签:

【中文标题】iOS 在 CoreLocation 崩溃【英文标题】:iOS crash in CoreLocation 【发布时间】:2012-02-22 23:40:39 【问题描述】:

我的 ios 应用在运行 10 分钟后出现崩溃:

Date/Time:       2012-02-22 15:26:41.415 -0800
OS Version:      iPhone OS 5.0.1 (9A405)
Report Version:  104

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x49980286
Crashed Thread:  6

有问题的线程:

Thread 6 name:  Dispatch queue: com.apple.locationd.registration.xpcq
Thread 6 Crashed:
0   libstdc++.6.dylib               0x33ed32f8 std::string::compare(std::string const&) const + 8
1   CoreLocation                    0x3095ad54 std::_Rb_tree<std::string, std::pair<std::string const, void ( block_pointer)(CLConnectionMessage*)>, std::_Select1st<std::pair<std::string const, void ( block_pointer)(CLConnectionMessage*)> >, std::less<std::string>, std::allocator<std::pair<std::string const, void ( block_pointer)(CLConnectionMessage*)> > >::find(std::string const&) + 32
2   CoreLocation                    0x30959964 CLConnection::handleMessage(CLConnectionMessage*) + 16
3   CoreLocation                    0x3095a78c __setEventHandler_block_invoke_0 + 360
4   libxpc.dylib                    0x37a428c2 __XPC_CONNECTION_EVENT_HANDLER_CALLOUT__ +    30
5   libxpc.dylib                    0x37a3bd5c _xpc_connection_recv_message + 500
6   libxpc.dylib                    0x37a3bb18 _xpc_connection_wakeup_recv + 160
7   libxpc.dylib                    0x37a3b9b8 _xpc_connection_wakeup2 + 1264
8   libxpc.dylib                    0x37a3b3f6 _xpc_connection_wakeup + 62
9   libdispatch.dylib               0x36d7821e _dispatch_source_invoke + 510
10  libdispatch.dylib               0x36d75b70 _dispatch_queue_invoke$VARIANT$up + 40
11  libdispatch.dylib               0x36d75caa _dispatch_queue_drain + 202
12  libdispatch.dylib               0x36d75b66 _dispatch_queue_invoke$VARIANT$up + 30
13  libdispatch.dylib               0x36d75caa _dispatch_queue_drain + 202
14  libdispatch.dylib               0x36d75b66 _dispatch_queue_invoke$VARIANT$up + 30
15  libdispatch.dylib               0x36d75caa _dispatch_queue_drain + 202
16  libdispatch.dylib               0x36d75b66 _dispatch_queue_invoke$VARIANT$up + 30
17  libdispatch.dylib               0x36d7676c _dispatch_worker_thread2 + 208
18  libsystem_c.dylib               0x32ee21c8 _pthread_wqthread + 288
19  libsystem_c.dylib               0x32ee209c start_wqthread + 0

控制台没有给我任何消息,只是说我发生了崩溃。有什么想法吗?

【问题讨论】:

显示您正在使用的 CoreLocation 代码。 这是一个成熟的应用程序......使用 CoreLocation 的代码实际上有数千行。 EXC_BAD_ACCESS,您正在尝试访问过度释放的对象。您是否在 Zombies 仪器中运行了您的应用程序?和/或您是否设置了启用 NSZombie 的环境变量,以提供有关其导致此问题的位置的更多信息? 如果它是一个成熟的应用程序,您能否向我们展示您最近所做的可能导致此崩溃的更改? 我确实在 Instruments running Zombies 中发现了这个崩溃。当它崩溃时,我得到了相同的崩溃日志,但 Instruments 没有找到对已释放对象的访问权限。 【参考方案1】:

所以经过大量挖掘后,我能够重现问题并找到导致它的原因。如果您在紧密循环中调用 -[CLLocationManager startUpdatingLocation] 和 -[CLLocationManager stopUpdatingLocation],这似乎会发生。

【讨论】:

我也看到当应用程序处于后台并接收位置更新时发生同样的崩溃行为。但是,我不会在任何循环中调用 startUpdatingLocationstopUpdatingLocation 紧环是什么意思?我遇到了 CoreLocation 的崩溃,如下所示: CoreLocation: CLConnection::sendMessageInternal 。但我在网上找不到任何解决方案。 我在 stopUpdatingLocation 时设置了 locationManager.delegate = nil。 locationManager.delegate = self 在 startUpdatingLocation 时。它对我有用【参考方案2】:

我也遇到了这个问题,但只在 iOS 5.x 上(在模拟器中测试,没有设备。)当我有多个位置管理器实例并且都有代理时似乎会发生这种情况放。

【讨论】:

以上是关于iOS 在 CoreLocation 崩溃的主要内容,如果未能解决你的问题,请参考以下文章

更新 iOS Core Data 版本以避免崩溃

IOS Core Location 框架精度

iOS核心笔记—CoreLocation框架-基础

iOS Core Data - 如何避免同时保存多个上下文时崩溃?

iOS CoreLocation框架

IOS-CoreLocation