用NSZombieEnabled解决恼人的EXC_BAD_ACCESS错误
2016-06-18 22:47
274 查看
本文转自 http://longtimenoc.com
有时开发者会遇到这样的问题:程序突然Crash,出现EXC_BAD_ACCESS错误。但是不是每次都Crash,Debug时最终基本停在objc-msgsend这里,十分令人费解。
首先解释下EXC_BAD_ACCESS,当你向已经释放的对象发送消息时就会出现这种错误。
至于NSZombieEnabled,就是当设置NSZombieEnabled环境变量后,一个对象销毁时会被转化为_NSZombie,个人感 觉和线程的那几个状态有些相似,设置NSZombieEnabled后,当你向一个已经释放的对象发送消息,这个对象就不会向之前那样Crash或者产生 一个难以理解的行为,而是放出一个错误消息,然后以一种可预测的可以产生debug断点的方式消失(原文是die),因此我们就可以找到具体或者大概是哪 个对象被错误的释放了。
设置NSZombieEnabled的方法如下
在XCode左边那个Groups & Files栏中找到Executables,双击其中的一项,或者右键Get Info;
切换到Arguments
这里一共有两个框,在下面那个Variables to be set in the environment:点+号添加一项,Name里填NSZombieEnabled,Value填Yes,要保证前面的钩是选中的。
好了,赶紧去找哪里出了问题吧,至于取消NSZombieEnabled,就是吧刚才提到的那个钩取消即可。
最后总结一下感想,首先是我对EXC_BAD_ACCESS这个错误还没有足够的认识,其次是我没有尽快的去搜索一下解决方法,这两点导致我浪费了大量时间做各种各样奇怪的调试。幸好现在解决了,可以继续工作了。
有时开发者会遇到这样的问题:程序突然Crash,出现EXC_BAD_ACCESS错误。但是不是每次都Crash,Debug时最终基本停在objc-msgsend这里,十分令人费解。
首先解释下EXC_BAD_ACCESS,当你向已经释放的对象发送消息时就会出现这种错误。
至于NSZombieEnabled,就是当设置NSZombieEnabled环境变量后,一个对象销毁时会被转化为_NSZombie,个人感 觉和线程的那几个状态有些相似,设置NSZombieEnabled后,当你向一个已经释放的对象发送消息,这个对象就不会向之前那样Crash或者产生 一个难以理解的行为,而是放出一个错误消息,然后以一种可预测的可以产生debug断点的方式消失(原文是die),因此我们就可以找到具体或者大概是哪 个对象被错误的释放了。
设置NSZombieEnabled的方法如下
在XCode左边那个Groups & Files栏中找到Executables,双击其中的一项,或者右键Get Info;
切换到Arguments
这里一共有两个框,在下面那个Variables to be set in the environment:点+号添加一项,Name里填NSZombieEnabled,Value填Yes,要保证前面的钩是选中的。
好了,赶紧去找哪里出了问题吧,至于取消NSZombieEnabled,就是吧刚才提到的那个钩取消即可。
最后总结一下感想,首先是我对EXC_BAD_ACCESS这个错误还没有足够的认识,其次是我没有尽快的去搜索一下解决方法,这两点导致我浪费了大量时间做各种各样奇怪的调试。幸好现在解决了,可以继续工作了。
相关文章推荐
- 剑指offer——滑动窗口的最大值
- 关于多线程GCD,小白必须知道的常用函数
- 大话设计模式-Chapter2策略模式
- Linux C 指针练习
- Collections类
- Storm架构分析
- iOS 美丽说瀑布流界面纯AutoLayout光速布局
- pom.xml常用元素介绍
- Ldap介绍
- Java - PAT - 1011. A+B和C (15)
- Android 自定义View 跳动的水果和文字
- 指针类型强制转换
- 九度OJ 1015
- 开源中国学习(首页新闻资讯类的实现)
- JavaSE学习52:细说多线程之Thread类和Runable接口
- Android:Activity+Fragment及它们之间的数据交换
- [bzoj1532] [POI2005]Kos-Dicing
- mamcached 从安装到使用
- 重构列表 -- 三
- 安卓开发:Please ensure that adb is correctly located at……问题解决方案