`
bengan
  • 浏览: 199416 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics