开发笔记 - 设置NSZombieEnabled调试EXC_BAD_ACCESS
2016-01-10 12:58
405 查看
前言:当你对已释放的对象发送消息(90%的可能是对引用计数为0的对象再release)或release那些autorelease对象时,就会出现报EXC_BAD_ACCESS这样的错误。默认设置下 Xcode不会给你定位具体是哪一行代码不该去使用已释放的对象,或者release用错了。
设置xcode环境变量NSZombieEnabled,MallocStackLogging的步骤:Product -> EditScheme(option+command+R) -> Diagnostics ,勾选“Objective-C”之后的“Enable Zombie Objects”。EnableZombie Objects
说明:设置NSZombieEnabled环境变量后,一个对象销毁时会被转化为_NSZombie;设置NSZombieEnabled后,当你向一个已经释放的对象发送消息,这个对象就不只是报EXC_BAD_ACCESS Crash,还会放出一个错误消息,然后以一种可预测的可以产生debug断点的方式消失, 因此我们可以找到具体或者大概是哪个对象被错误的释放或引用了。
**注意:**NSZombieEnabled只能在调试的时候使用,千万不要忘记在产品发布的时候去掉,因为NSZombieEnabled不会真正去释放dealloc对象的内存,一直开启后果自负!
设置xcode环境变量NSZombieEnabled,MallocStackLogging的步骤:Product -> EditScheme(option+command+R) -> Diagnostics ,勾选“Objective-C”之后的“Enable Zombie Objects”。EnableZombie Objects
说明:设置NSZombieEnabled环境变量后,一个对象销毁时会被转化为_NSZombie;设置NSZombieEnabled后,当你向一个已经释放的对象发送消息,这个对象就不只是报EXC_BAD_ACCESS Crash,还会放出一个错误消息,然后以一种可预测的可以产生debug断点的方式消失, 因此我们可以找到具体或者大概是哪个对象被错误的释放或引用了。
**注意:**NSZombieEnabled只能在调试的时候使用,千万不要忘记在产品发布的时候去掉,因为NSZombieEnabled不会真正去释放dealloc对象的内存,一直开启后果自负!
相关文章推荐
- 网络知识点
- Swift 1.构造函数-必选属性
- strcmp && strcpy && strlen && strcat 源码
- [转] C#调用外部DLL
- 常用的十八大学术搜索引擎
- [python]自问自答:python -m参数?
- javascript 面向对象总结
- Alcatraz install 安装步骤
- iOS7.1以及iOS9.2与之前的不同
- springmvc(四) 入门程序小结
- Golang初级系列教程-控制结构-switch-case
- javascript常用方法总结
- Java中一个比String类的split方法好用的分隔字符串类StringTokenizer
- 使用迅雷下载百度网盘资源
- 解决TIME_WAIT过多问题
- 关于CSplitterWnd类窗口静态分割总结
- Mutext,pthread_mutext_t
- spring事物配置,声明式事务管理和基于@Transactional注解的使用
- mysql 数据库性能追踪与分析
- 树莓派添加DTS功能