好培训网合作机构 > 学校机构 > 上海九城学院欢迎您!

咨询热线 13305008725

XCode调试技巧之EXC_BAD_AC

发布时间:2018-05-25 11:09:28

 
ios培训 - www.the9edu.com  

XCode调试窍门之EXC_BAD_ACCESS中BUG处理是这篇文章要介绍的内容,在iphone开发的时分EXC_BAD_ACCESS这个bug时不容易找到缘由的,在网上找到的3个关于这个疑问的办法,期望能够帮到你,我自个试了一下第一中办法,作用还不错

首先说一下 EXC_BAD_ACCESS 这个过错,能够这么说,90%的过错来历在于对一个现已开释的目标进行release操作。

1. 重写object的respondsToSelector办法,实际呈现EXEC_BAD_ACCESS前拜访的最终一个object

有时程序溃散底子不知过错发生在什么当地。比方程序呈现EXEC_BAD_ACCESS的时分,尽管大多数状况运用设定 NSZombieEnabled环境变量能够协助你找到疑问的地点,但少量状况下,即便设定了NSZombieEnabled环境变量,仍是不晓得程序崩 溃在什么当地。那么就需求运用下列代码进行协助了:

	
  1.  #ifdef _FOR_DEBUG_  
  2. -(BOOL) respondsToSelector:(SEL)aSelector {  
  3.     printf("SELECTOR: %sn", [NSStringFromSelector(aSelector) UTF8String]);  
  4.     return [super respondsToSelector:aSelector];  
  5. }  
  6. #endif  

你需求在每个object的.m或许.mm文件中参加上面代码,并且在 other c flags中参加-D _FOR_DEBUG_(记住请只在Debug Configuration下参加此符号)。这样当你程序溃散时,Xcode的console上就会精确地记录了最终运转的object的办法。

2. 经过NSZombieEnabled

信任很多人都晓得经过NSZombies来协助调试呈现EXC_BAD_ACCESS的状况,但有时仍是找不到需求的信息,那么大概怎么办呢?

下面经过一个例子来阐明.下面是hello world的代码:

	
  1. NSString* hello = [NSString stringWithFormat:@"Hello world"];  
  2. NSLog(@"What you say is %@",hello);  
  3. [hello release];  

运转后呈现EXC_BAD_ACCESS过错.但没有其他任何提示,这时 候经过右击executables下的运用程序名,挑选get info后,在arguments下输入环境变量(NSZombieEnabled,MallocStackLogging)