EXC_BAD_ACCESS出现解决问题
2014-05-30 08:16
211 查看
iOS开发,程序经常会崩溃,用bt命令打出调用栈或者断点调试,给出的是一堆系统EXC_BAD_ACCESS的信息,根本没办法定位问题出现在哪里。通常这样的崩溃出现,原因一般就是:调用了已经释放的内存空间,或者说重复释放了某个地址空间。而怎样定位到这个地址呢,可以通过编辑xcode的scheme,添加如下标记位,让系统把错误地址打印出来,如图:
(通过Product->Scheme->Edit Scheme进入下面编辑页面,选中Arguments tab,增加标计位NSZombieEnabled设为YES)这样,但崩溃出现,系统会出现以下提示信息:
2013-06-23 00:45:20.479 *** -[__NSArrayM addObject:]: message sent to deallocated instance 0x7179910
可见崩溃原因是内存地址[b]0x7179910被重复释放了。[/b]
如果崩溃是发生在当前调用栈,通过上面的做法,系统就会把崩溃原因定位到具体代码中。但是,如果崩溃不在当前调用栈,系统就仅仅只能把崩溃地址告诉我们,而没办法定位到具体代码,这样我们也没法去修改错误。这时就可以修改scheme,让xcode记录每个地址alloc的历史,这样我们就可以用命令把这个地址还原出来。如图:(跟设置NSZombieEnabled一样,添加MallocStackLoggingNoCompact,并且设置为YES)
这样,当出现崩溃原因是message sent to deallocated instance 0x7179910,我们可以使用以下命令,把内存地址还原:
info malloc-history [b]0x7179910[/b]
如图,这个命令能具体把这个地址在哪一行代码生成还原出来。
(需要注意的是,因为这个命令只支持gdb,所以必须把控制台的输出改成gdb,并且有点遗憾的是,只支持模拟器,不支持真机调试)
(同样是通过Product->Scheme->Edit Scheme进入上面编辑页面,选中Info tab)
这样,好好检查一下那一行的代码,应该就很容易找出问题所在了。
相关文章推荐
- 初次使用ASIHttpRequest,出现EXC_BAD_ACCESS问题
- 由xCode4里面设置NSZombieEnabled,解决EXC_BAD_ACCESS问题引出
- ios 关于[xxx timeIntervalSinceNow]出现EXC_BAD_ACCESS错误的解决办法
- 如何解决奔溃问题--SIGABRT和EXC_BAD_ACCESS
- 使用NSZombie解决EXC_BAD_ACCESS问题
- EXC_BAD_ACCESS(code=1问题的解决办法
- 查找 EXC_BAD_ACCESS 问题根源的方法
- iPhone Objective-C EXC_BAD_ACCESS问题
- 查找 EXC_BAD_ACCESS 问题根源的方法
- iPhone Objective-C EXC_BAD_ACCESS问题
- XCode调试技巧之EXC_BAD_ACCESS中BUG解决
- c#操作access,出现“内部错误: 无效的参数访问器: 2 BADBINDINFO”的解决办法
- 查找 EXC_BAD_ACCESS 问题根源的方法
- IPhone Exec_Bad_Access问题解决办法
- XCode调试技巧之EXC_BAD_ACCESS中BUG解决
- 转--如何解决EXC_BAD_ACCESS错误
- 查找 EXC_BAD_ACCESS 问题根源的方法
- 用NSZombieEnabled解决恼人的EXC_BAD_ACCESS错误
- 查找 EXC_BAD_ACCESS 问题根源的方法
- XCode调试技巧之EXC_BAD_ACCESS中BUG解决