ios开发中,最郁闷的莫过于程序毫无征兆的就奔溃了,用bt命令打出调用栈 给出的使一堆EXC_BAO_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

可见崩溃原因是内存地址0x7179910被重复释放了。

 

如果奔溃使发生在当前调用栈 通过上面的做法 系统会把奔溃原因定位到具体代码中  但是  如果奔溃不在当前调用栈 系统就仅仅只能把奔溃地址告诉我们  而没办法定位到具体代码  这样我们也就没法去修改错误  这时就可以修改scheme 让xcode记录每个地址allco的历史  这样我们就可以用命令把这个地址还原出来 

跟设置NSZombieEnabled一样 添加MallocStackLoggingNoCompact 并且设置为YES

 

这样 当出现奔溃原因是message sent to deallocated instance 0x7179910 我们可以使用一下命令 把内存地址还原

info malloc-history 0x7179910

这个命令能具体把这个地址在那一行代码生成还原出来

 

同样通过product->Scheme->edit Scheme进入上面编辑页面 选中info tab

这样好好检查一下 应该可以定位问题了