iOS 开发之EXC_BAD_ACCESS异常分析

Posted Rinpe

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS 开发之EXC_BAD_ACCESS异常分析相关的知识,希望对你有一定的参考价值。

一:EXC_BAD_ACCESS异常介绍
在调试objective-c程序的过程中,程序crash的现象在所难免,但大部分的错误都能够通过显示的错误原因结合NSLog的方式来解决,比如NSInvalidArgumentException(名字就能看出来是什么错误)等,实在搞不定还有debug这个杀手锏。但唯独EXC_BAD_ACCESS这个异常太难处理了,名字看不出来是什么原因,其他提示也没有,debug都搞不定。
先来介绍下EXC_BAD_ACCES:这个异常基本上是内存使用不当造成的,而且90%的错误来源在于对一个已经释放的对象进行release操作。

二:分析方法
为工程运行时加入 NSZombieEnabled 环境变量,并设为启用,则在 EXC_BAD_ACCESS 发生时,XCode 的 Console 会打印出问题描述。并同时添加MallocStackLogging和MallocStackLoggingNoCompact两个环境变量,来启用malloc记录
技术分享


技术分享

 

三:输出信息
只要添加了NSZombieEnabled变量,在发生EXC_BAD_ACCESS会在concole中打印出错误原因,绝大多数都会出现这个信息
技术分享


运行代码,出现下面的崩溃现象
技术分享
 
下面我们打开“活动监视器”,找到我们对应的PID,我们的Target为HPThemeManager,只要找到HPThemeManager对应的PID就可以(HPThemeManager是在论坛里下载的,本来正在看代码,就直接拿他来作试验了)
技术分享
 
现在,我们得到了两个主要的信息:
进程ID:50127
崩溃地址:0x6d564f0

我们打开终端,输入以下命令:

[代码]c#/cpp/oc代码:

1 sudo malloc_history 50127 0x6d564f0

结果显示为:

技术分享
 
这样我们用能定位到这行代码
 
转自:http://www.1000phone.net/thread-6921-1-2.html

以上是关于iOS 开发之EXC_BAD_ACCESS异常分析的主要内容,如果未能解决你的问题,请参考以下文章

ios中的奇怪崩溃Signal和EXC_BAD_ACCESS错误分析

iOS异常处理

CGContextStrokePath 在 iOS > 5 中触发 EXC_BAD_ACCESS [重复]

在 iOS 9.0 中开始获取 EXC_BAD_ACCESS(点击表格视图中的单元格时)

IOS开发的哪些异常之异常断点

访问非空变量时出现 EXC_BAD_ACCESS 异常