博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何定位EXC_BAD_ACCESS错误 (info malloc-history)
阅读量:5815 次
发布时间:2019-06-18

本文共 1299 字,大约阅读时间需要 4 分钟。

在 iphone 开发中使用内存时,我们经常会遇到 
EXC_BAD_ACCESS 的错误。 出现这个错误的原因是我们访问了一个已经被释放掉的对象,如:
@implementation FeedbackViewController- (void)viewDidLoad {	[super viewDidLoad];	_scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 53, 320, 389)];	[self.view addSubview:_scrollView];	[_scrollView release];}- (void)dealloc {	[_scrollView release];	[super dealloc];}@end
在上面的代码中,
_scrollView 是 
FeedbackViewController 中的一个数据成员。
_scrollView 创建后先加入到父视图中,然后将其 
release,此时 
_scrollView 的引用计数应该为1,在父视图销毁时,
_scrollView 会被释放掉,这正是我们期望的结果。 但是 
FeedbackViewController 的 
dealloc 函数中,对 
_scrollView 对象又进行了一次 
release,很显然这会造成对象的多次释放。 执行上面的代码,在 
FeedbackViewController 退出时,
[_scrollView release]; 会引起程序异常退出,且在控制台中输出 
EXC_BAD_ACCESS : 根据这个信息很难判断是哪儿出了问题。

问题解决


打开可执行文件的属性: 打开 
Executable [YourApp] Info 界面,在 
Variables to be set in the enviroment 中加入以下两个环境变量,将其值设置为 YES,并确保被钩选。 MallocStackLogging NSZombieEnabled 设置完成后,再次执行前面引起 EXC_BAD_ACCESS 异常的步骤,这时控制台会输出如下信息:
2012-03-15 22:02:12.029 AlipayPortal[616:207] *** -[CALayer retainCount]: message sent to deallocated instance 0x14e48a40
这个输出中有个很重要的信息就是定位到了无效对象在内存中的地址,我们已经打开了 
MallocStackLoggin 选项,编译器会记录该内存的分配堆栈。在控制台中输入以下命令:
(gdb) info malloc-history 0x14e48a40
会得到以下输出: 根据第10行就可以定位到创建对象的代码,这样也就容易查找 EXC_BAD_ACCESS 的问题了。

转载于:https://www.cnblogs.com/liuxingzi/archive/2012/11/13/3404248.html

你可能感兴趣的文章
Using RequireJS in AngularJS Applications
查看>>
hdu 2444(二分图最大匹配)
查看>>
shell编程笔记六:实现ll命令
查看>>
【SAP HANA】关于SAP HANA中带层次结构的计算视图Cacultation View创建、激活状况下在系统中生成对象的研究...
查看>>
[nodejs] nodejs开发个人博客(五)分配数据
查看>>
《Linux内核修炼之道》 之 高效学习Linux内核
查看>>
Java数据持久层框架 MyBatis之API学习九(SQL语句构建器详解)
查看>>
30分钟Git命令“从入门到放弃”
查看>>
nginx : TCP代理和负载均衡的stream模块
查看>>
MYSQL数据库间同步数据
查看>>
DevOps 前世今生 | mPaaS 线上直播 CodeHub #1 回顾
查看>>
iOS 解决UITabelView刷新闪动
查看>>
让前端小姐姐愉快地开发表单
查看>>
Dubbo笔记(四)
查看>>
Web前端JQuery入门实战案例
查看>>
java B2B2C Springboot电子商城系统- SSO单点登录之OAuth2.0 登出流程(3)
查看>>
USB 通信原理
查看>>
7zZip zip RAR iOS
查看>>
date命令的详细用法!
查看>>
UiAutomator源码分析之UiAutomatorBridge框架
查看>>