【边角】调试

How do I setup NSZombieEnabled in Xcode 4?


Edit Scheme --- Argument ---Environment Variables里添加NSZombieEnabled属性,value为yes


⌥⌘R is the menu shortcut for selecting Product, keeping alt pressed, and clicking "Run...". Clicking "Enable Zombie Objects" is the same as manually adding "NSZombieEnabled = YES" in the section "Environment Variables" of the tab Arguments.


旧版本的调试界面

http://stephen830.iteye.com/blog/1461126

http://lovebirdegg.iteye.com/blog/550489


在命令行中使用 GDB 命令来调试我们的程序,重要




查找 EXC_BAD_ACCESS 问题根源的方法

首先说一下 EXC_BAD_ACCESS 这个错误,可以这么说,90%的错误来源在于对一个已经释放的对象进行release操作。举一个简单的例子来说明吧,首先看一段Java代码:

public class Test{
        public static void main(String[] args){
                String s = “This is a test string”;
                s = s.substring(s.indexOf(“a”),(s.length()));
                System.out.println(s);
               
        }
}

    这种写法在Java中很常见也很普遍,这不会产生任何问题。但是到了 Objective-C 中,就会出事,考虑这个程序:

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
        NSString* s = [[NSString alloc]initWithString:@”This is a test string”];
        s = [s substringFromIndex:[s rangeOfString:@"a"].location];//内存泄露
        [s release];//错误释放
[pool drain];//EXC_BAD_ACCESS
return 0;
}

    这个例子当然狠容易的看出问题所在,如果这段代码包含在一个很大的逻辑中,确实容易被忽略。Objective-C 这段代码有三个致命问题:1、内存泄露;2、错误释放;3、造成 EXC_BAD_ACCESS 错误。


你可能感兴趣的:(【边角】调试)