做iOS的开发者,经常都会遇到这个问题,我在这里做一下简单的分析
下面是crash log,摘自:【EXC_BAD_ACCESS 】crash报告的问题
Exception Type: EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x00000009
Crashed Thread: 0
Thread 0 Crashed:
0 libobjc.A.dylib 0x000027d8 objc_msgSend + 16
1 CoreLocation 0x00009e54 -[CLLocationManager onClientEventLocation:] + 556
2 CoreLocation 0x000080ba -[CLLocationManager onClientEvent:supportInfo:] + 98
3 CoreLocation 0x00008208 OnClientEvent + 16
4 CoreLocation 0x0000331a CLClientInvokeCallback(__CLClient*, CLClientEvent, __CFDictionary const*) + 42
5 CoreLocation 0x00005a4c CLClientHandleDaemonDataLocation(__CLClient*, CLClientLocation const*, __CFDictionary const*) + 204
6 CoreLocation 0x00005baa CLClientHandleDaemonData(__CFMessagePort*, long, __CFData const*, void*) + 298
7 CoreFoundation 0x000609ce __CFMessagePortPerform + 242
8 CoreFoundation 0x00034cdc __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 20
9 CoreFoundation 0x00034ca0 __CFRunLoopDoSource1 + 160 CoreFoundation 0x00027566 __CFRunLoopRun + 514
11 CoreFoundation 0x00027270 CFRunLoopRunSpecific + 224
12 CoreFoundation 0x00027178 CFRunLoopRunInMode + 52
13 GraphicsServices 0x000045ec GSEventRunModal + 108
14 GraphicsServices 0x00004698 GSEventRun + 56
15 UIKit 0x0000411c -[UIApplication _run] + 396
16 UIKit 0x00002128 UIApplicationMain + 664
17 kfc 0x00002a10 0x1000 + 6672
18 kfc 0x00002984 0x1000 + 6532
这个crash报告当做一个调用堆栈进行分析。栈底是程序的入口,栈顶是程序出错的地方。
再来看下面三行
Exception Type: EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x00000009
Crashed Thread: 0
第一行 Exception Type: EXC_BAD_ACCESS (SIGBUS)
EXC_BAD_ACCESS 是异常类型,这钟类型表示访问了已经被release或者不存在的对象,导致出错,有时候会运行正常,这种情况说明被release的内存,被重用了,这就是常说的僵尸信号,关于僵尸信号楼主可以看看这个下面的帖子
http://www.devdiv.com/forum.php?mod=viewthread&tid=118126。
第二行:Exception Codes: KERN_PROTECTION_FAILURE at 0x00000009
表示异常出错的代码。此处的KERN_PROTECTION_FAILURE意思如下:
操作系统不允许用户访问(读/写)的内存地址类型,地址0x00000009就是这样的类型,经常导致的原因就是使用了从来都没有被初始化的指针
第三行:Crashed Thread: 0
表示crash所在线程编号。此处为0,应该是主线程。
综合上述,应该是在给libobjc.A.dylib库的相关对象发送消息的时候,没有初始化接收消息的对象,或者该对象已经被release。如果不是楼主自己调用libobjc库,那么有可能是别的调用了,只需要分析一下堆栈信息就知道。
参考:http://stackoverflow.com/questions/3411346/how-to-diagnose-a-kern-protection-failure
转自: http://www.devdiv.com/home.php?mod=space&uid=6998&do=blog&id=7619
分享到:
相关推荐
在ios开发过程中经常出现EXC_BAD_ACCESS错误而导致程序崩溃,这里将介绍如何利用XCode和Instrument来查找错误发生的地方,从而更好的定位
查找 EXC_BAD_ACCESS 问题根源的方法
详细介绍了通过Instrument工具,可视化的定位EXC_BAD_ACCESS 错误的位置。是本人自己实践总结出来,绝对好用。
iOS开发,最郁闷的莫过于程序毫无征兆地就崩溃了,用bt命令打出调用栈,给出的是一堆系统EXC_BAD_ACCESS的信息,根本没办法定位问题出现在哪里
NULL 博文链接:https://bengan.iteye.com/blog/1471440
db2exc_975_WIN 数据库安装包,官网下载,亲测可用。 IBM DB2 是一套关系型数据库管理系统,DB2 Express - C
db2exc_970_LNX_x86_64.tar.gz Linux 64位系统 的db2 安装包。(第一部分)
db2exc_970_LNX_x86_64.tar.gz Linux 64位系统 的db2 安装包。(第二部分) 另一部分:https://download.csdn.net/download/qq_37570669/11260296
CGImageIssueDemo 核心图形问题测试 做什么的 似乎对于iOS 11.2 +, CoreGraphics.framework发生了奇怪的... 这导致EXC_BAD_ACCESS KERN_INVALID_ADDRESS 0x0000000000000000 。 重现步骤 使用CGDataProviderCreateDi
在实际调试程序的过程中,有时只获得异常的类型是远远不够的,还需要...模块 sys 中,有两个方法可以返回异常的全部信息,分别是 exc_info() 和 last_traceback(),这两个函数有相同的功能和用法,本节仅以 exc_info
出现EXC_BAD_ACCESS。 需要修改Product->Scheme->Edit Scheme->Options->GPU Frame Capture 选择 Disabled。 功能介绍 模仿Filckr的照相功能实现了: 1.实时滤镜 2.相机基本功能:拍照,对焦,前后...
电磁波时域有限元分析代码,更够很好的仿真波形不失真
excitatory neuron connection.
主要涉及ADO编程模型中的记录集。
CAD to Excel VBA程序 AutoCAD中的二次开发程序
excel做的传统工程量计算表(加入vba后能自动计算、汇总、标注说明) 1、序号根据填入的分部分项名称自动填出1~N的数值。 2、代码栏根据填入的数据自动给出同一分部分项名称序号,为汇总提供方便。...
VB.NET编写 自动提取Excel 中的数据程序
AudioPlayerSwift, 在 iOS,macOS 和tvOS应用程序中,AudioPlayer是一个用于播放音频的简单类 AudioPlayer AudioPlayer是一个在 iOS,macOS 和tvOS应用中播放音频的简单类。用法// Initializelet audioPlayer = ...