1.开启 Enable NSZombie Objects(开启僵尸对象) 模式
Enable NSZombie Objects可能是整个Xcode开发环境中最有用的调试技巧。这个技巧非常非常容易追踪到重复释放内存 或者 使用已经释放的内存地址 的问题。该技巧会以非常简洁的方式打印指出重复释放的类和该类的内存地址。
怎么开启僵尸对象呢?首先打开“Edit Scheme”,然后选择Diagnostics选项卡,勾选Enable NSZombie Objects选项。
现在我们可以关掉ARC来测试重复释放的问题、异常和更容易产生的Crashs,但是即使开启ARC,重复释放和与内存相关的Crashs也经常发生。现在假设我们犯了一些错误导致了重复释放的发生来观察将要发生什么。
现在运行这段代码
UIView* view = [[[UIView alloc] init] autorelease];// 释放一次
// it has been autoreleased.
[view release];// 释放一次
Enable NSZombie Objects会让输出这样的崩溃信息
2.Condational Breakpoints(条件断点)
这只是普通的断点,当变量满足一定条件时程序停止
这个调试技巧在当你想要捕获一个循环中的变量的特定值或者一些不常发生的情况时是非常有用的,而不用你每次迭代都停止来查看。
鼠标点击,添加一个普通的断点,然后右键点击断点选择“Edit Breakpoint”,这时就打开了一个断点编辑器,你可以在这里设置断点条件(以及一些其他的断点设置),然后选择“Done”,这个调试技巧非常简单吧。
3.unrecognized selector send to instancd 快速定位
添加一个 add Symbolic Breakpoint
在Symbolic中填写如下方法签名
-[NSObject(NSObject) doesNotRecognizeSelector:]
设置完成后再遇到类似的错误就会定位到具体的代码。