iOS【EXC_BAD_ACCESS 】crash报告分析

做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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值