iOS开发中出现异常是免不了的。今天就说说EXC_BAD_ACCESS。
1设置环境变量NSZombieEnabled ,MallocStackLogging,如图:
product->Edit Scheme
![iOS 一场EXC_BAD_ACCESS - AA - 小老虎的博客 iOS 一场EXC_BAD_ACCESS - AA - 小老虎的博客](http://img1.ph.126.net/KrRobVfA9SbYE7yYu6JSCA==/606297099851772004.png)
最后大家记得把环境变量NSZombieEnabled,MallocStackLogging删除或设置为NO,因为它们会使得内存不会被释放.
2 设置全局断点。
进入断点窗口
选择底部的“+”, 单击Add Symbolic Breakpoint..., 输入-[NSException raise],然后按Done键。
![iOS 一场EXC_BAD_ACCESS - AA - 小老虎的博客 iOS 一场EXC_BAD_ACCESS - AA - 小老虎的博客](http://img1.ph.126.net/FtR8ynm8Wj1KPKC3RD50Hg==/1625799465580934593.png)
其次,再按照上面的步骤添加另外一个全局断点objc_exception_throw。
3.重写object的respondsToSelector方法
#ifdef _FOR_DEBUG_
-(BOOL) respondsToSelector:(SEL)aSelector {
printf("SELECTOR: %s\n", [NSStringFromSelector(aSelector) UTF8String]);
return [super respondsToSelector:aSelector];
}
#endif
你需要在每个object的.m或者.mm文件中加入上面代码,并且在 other c flags中加入-D _FOR_DEBUG_(记住请只在Debug Configuration下加入此标记)。这样当你程序崩溃时,Xcode的console上就会准确地记录了最后运行的object的方法。
4.
shell malloc_history <pid> <address>"
参考文章:http://blog.sina.com.cn/s/blog_876a2c9901016ezh.html
http://mobile.51cto.com/iphone-279455.htm