sigsegv segv_accerr 在 ios7 中崩溃 mkmapview

Posted

技术标签:

【中文标题】sigsegv segv_accerr 在 ios7 中崩溃 mkmapview【英文标题】:sigsegv segv_accerr crash mkmapview in ios7 【发布时间】:2014-01-27 23:31:50 【问题描述】:

我有一个应用程序在前台崩溃。我在根视图控制器中有一个 MKMapView。这个根视图控制器在顶部显示了一个模态视图控制器。当模态视图控制器被关闭时,在调用其 viewWillAppear 方法后,在根视图控制器中渲染 MKMapView 时似乎发生了崩溃。这发生在 ios7 中。有谁知道导致这种崩溃的原因是什么?崩溃发生在前台,和Occasionally iOS 6 MKMapView crashes in initWithFrame不一样

堆栈跟踪:

Exception Type:  SIGSEGV
Exception Codes: SEGV_ACCERR at 0x200000a0
Crashed Thread:  13

0     IMGSGX543GLDriver                     0x2efadfd6 sgxBindCurrentTextures + 118
1     IMGSGX543GLDriver                     0x2efaf143 sgxBeginRender + 399
2     IMGSGX543GLDriver                     0x2efa75c3 glrClearCore + 235
3     IMGSGX543GLDriver                     0x2efa73e5 glrClear + 193
4     GLEngine                              0x323640c7 glClear_Exec + 395
5     VectorKit                             0x37bf1531 -[VKMapModel drawScene:withContext:] + 125
6     VectorKit                             0x37bf13f1 -[VKMapModel recursiveDrawScene:withContext:pass:] + 189
7     VectorKit                             0x37bf12d5 -[VKModelObject recursiveDrawScene:withContext:pass:] + 237
8     VectorKit                             0x37bf11e1 -[VKWorld drawScene:withContext:] + 45
9     VectorKit                             0x37bf0a0d -[VKScreenCanvas _renderCore:] + 353
10   VectorKit                              0x37befba7 __36-[VKScreenCanvas drawWithTimestamp:]_block_invoke_2 + 51
11   VectorKit                              0x37bd527f -[VGLContext perform:] + 67
12   VectorKit                              0x37befb5d __36-[VKScreenCanvas drawWithTimestamp:]_block_invoke + 113
13   libdispatch.dylib                      0x3ab36d1b _dispatch_call_block_and_release + 11
14   libdispatch.dylib                      0x3ab3d273 _dispatch_queue_drain$VARIANT$mp + 375
15   libdispatch.dylib                      0x3ab3d06b _dispatch_queue_invoke$VARIANT$mp + 43
16   libdispatch.dylib                      0x3ab3dce1 _dispatch_root_queue_drain + 77
17   libdispatch.dylib                      0x3ab3dc23 _dispatch_worker_thread + 87
18   libsystem_pthread.dylib                0x3ac7ac1d _pthread_body + 141
19   libsystem_pthread.dylib                0x3ac7ab8f _pthread_start + 103

【问题讨论】:

设置一个异常断点,当它被点击时点击运行几次来打印错误信息。发布。 顺便说一句,我从来没有重现过这个崩溃——它只发生在现场,所以我没有更多的调试能力。 你在执行诸如注释分组之类的事情吗?? 看到类似的情况。想知道您是否找到了解决方案? 【参考方案1】:

SIGSEV 通常意味着非法的内存寻址(nil,被破坏的对象),或者您的设备内存出现故障。如果您使用的是自定义地图图像,它们可能会太大或对设备的内存造成压力并导致其失败。一般来说,MapKit 在旧设备上不能正确处理超过 100 个点。

尝试测试不同的设备。如果它在每台设备上都失败了,那么您很可能在加载自定义图形的代码中出现错误。

如果仅在一台设备上失败,那么您的设备很可能存在问题。替换它。

【讨论】:

【参考方案2】:

MKMapView 可能正在被释放,但委托仍在尝试向其发送消息,因此发生了崩溃。尝试在呈现模式时将代理设置为 nil,然后在模式关闭后将其设置回自身。

【讨论】:

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

SIGSEGV SEGV_ACCERR 崩溃报告 - 怎么办?

当自动释放池耗尽时,NSFileAttributes dealloc 中的 SIGSEGV SEGV_ACCERR 崩溃?

一种signal 11 (SIGSEGV), code 2 (SEGV_ACCERR)的原因

iOS-iOS9系统SEGV_ACCERR问题处理v3.6.3的一些bug修复

View野指针问题分析报告

在 Xamarin.IOS 中执行本机代码时获得 SIGSEGV