IOS学习之设置NSZombieEnabled和MallocStackLogging解决EXC_BAD_ACCESS错误
来源:互联网 发布:cf最新刷枪软件 编辑:程序博客网 时间:2024/06/09 20:14
在XCode,4以上版本中,设置NSZombieEnabled和MallocStackLogging
1.点击XCode的Product菜单,选择Edit Scheme...选项
2.选择左侧的Run...,右边点击Arguments
3.在Environment Variables栏里,添加NSZombieEnabled,value为YES;再添加MallocStackLogging,value为YES;
如下图所示:
以上选项只能在模拟器上有效,如果你改变了iOS的版本,需要重新设定。
调试结束后,最好记得把环境变量NSZombieEnabled,MallocStackLogging前面的勾去掉,因为它们会使得内存不会被释放.
我们做iOS
比如你对已释放的对象发送消息时就会出现,EXC_BAD_ACCESS,再如release
比如
- static NSMutableArray*array;
- -(void)viewDidLoad
- {
- [superviewDidLoad];
- array= [[NSMutableArray alloc]initWithCapacity:5];
- [array release];//释放掉该数组
- }
- - (void)viewWillAppear:(BOOL)animated{
- [array addObject:@"Hello"];//使用释放掉的数组
- }
上面的代码就会出现EXC_BAD_ACCESS 错误,但我执行时 Xcode 一出错却是定位在我在 AppDelegate 的 application:didFinishLaunchingWithOptions: 方法上的某行了,如果代码量多了,要查找具体问题非常难,但凭经验了。
不过NSZombieEnabled
对
*** -[__NSArray addObject:]:message sent to deallocated instance 0x6557370
如何设置
Xcode3
1.
2.
3.
Xcode4
你可以点击 Xcode4 菜单 Product -> Edit Scheme-> Arguments, 然后将点击”加号”, 将 NSZombieEnabled 参数加到Environment Variables 窗口中, 后面的数值写上 ”YES”.
或者在 Xcode4 菜单
Xcode4
另外再说一下,如果没有为
- static NSMutableArray*array;
- -(void)viewDidLoad
- {
- [super viewDidLoad];
- array= [[NSMutableArray alloc]initWithCapacity:5];
- [array release];
- [array addObject:@"Hello"];//之所以不会crash,是在于事件周期未完,内存回收机制还没有执行,没有真正的回收掉array的对象内存。
- NSLog(@"%@",[array objectAtIndex:0]);
- }
但是一旦加上了NSZombieEnable
*** -[__NSArrayM addObject:]:message sent to deallocated instance 0x6557370
即使该array
- CocoaDev,个人觉得讲Cocoa技术十分专业的网站之一,下面的链接详细讲了讲NSZombieEnable的原理。http://www.cocoadev.com/index.pl?NSZombieEnabled
- 苹果官方的Mac OS X Debugging Magic,详细讲述了最为一个高级苹果程序员应该具备的调试技巧
http://developer.apple.com/library/mac/#technotes/tn2004/tn2124.html - 其实还可以在Instruments中开启NSZombie选项,这样就可以在Instruments中直接查看crash时候的callstack了:http://www.markj.net/iphone-memory-debug-nszombie/
最后提醒NSZombieEnabled只能在调试的时候使用,千万不要忘记在产品发布的时候去掉,因为NSZombieEnabled不会真正去释放dealloc对象的内存,一直开启后果可想而知,自重!
本文链接 http://unmi.cc/nszombieenabled-locate-exc_bad_access-error,来自 隔叶黄莺 Unmi Blog
- IOS学习之设置NSZombieEnabled和MallocStackLogging解决EXC_BAD_ACCESS错误
- 用NSZombieEnabled和MallocStackLogging解决恼人的EXC_BAD_ACCESS错误
- IOS 设置NSZombieEnabled和MallocStackLogging
- 设置NSZombieEnabled和MallocStackLogging
- 设置NSZombieEnabled和MallocStackLogging
- 设置NSZombieEnabled和MallocStackLogging
- 设置NSZombieEnabled和MallocStackLogging
- IOS开发(46)之设置 NSZombieEnabled 定位 EXC_BAD_ACCESS 错误
- IOS开发(46)之设置 NSZombieEnabled 定位 EXC_BAD_ACCESS 错误
- NSZombieEnabled 解决EXC_BAD_ACCESS错误
- 定位EXC_BAD_ACCESS错误 设置NSZombieEnabled
- 设置 NSZombieEnabled 定位 EXC_BAD_ACCESS 错误
- 设置 NSZombieEnabled 定位 EXC_BAD_ACCESS 错误
- 设置 NSZombieEnabled 定位 EXC_BAD_ACCESS 错误
- 设置 NSZombieEnabled 定位 EXC_BAD_ACCESS 错误
- 设置 NSZombieEnabled 定位 EXC_BAD_ACCESS 错误
- 设置 NSZombieEnabled 定位 EXC_BAD_ACCESS 错误
- iOS 开发 解决EXC_BAD_ACCESS错误的一种方法--NSZombieEnabled(转)
- mysql 索引类型详解-B-Tree索引
- Nginx 出现403 forbidden错误的设置方法!
- 覆盖override和重载overload的区别
- MYSQL的索引类型:PRIMARY, INDEX,UNIQUE,FULLTEXT,SPAIAL 有什么区别?各适用于什么场合?
- 二叉树的各种运算及遍历实现
- IOS学习之设置NSZombieEnabled和MallocStackLogging解决EXC_BAD_ACCESS错误
- 类中自身类的对象不能做自己的数据成员
- Android 监测手机网络状态变化
- 物联网资源
- MySQL索引类型一览 让MySQL高效运行起来
- x264代码剖析(十):x264核心算法框架
- BZOJ 4011 HNOI2015 落忆枫音
- Android ListView 疯狂之旅 之 《自定义下拉刷新功能的ListView》
- 前缀和:区间和