Xcode有個(gè)比較厲害而又經(jīng)常被忽略的斷點(diǎn)功能—Exceptions Breakpoint。
使用Exceptions Breakpoint的時(shí)候發(fā)現(xiàn),如果將Exceptions設(shè)置為All,會(huì)導(dǎo)致應(yīng)用在main()函數(shù)里面崩潰,避免這個(gè)問題的方法是將Exception更改為Objective-C.
在stack overflow看到的解釋如下:
附鏈接:http://stackoverflow.com/questions/26127004/xcode-throws-an-exception-in-main-in-ios-8-with-all-exceptions-breakpoint
About Exceptions Breakpoint
蘋果官方文檔只介紹了這個(gè)斷點(diǎn)的使用方法,沒對(duì)這個(gè)斷點(diǎn)的功能做具體的介紹。
當(dāng)應(yīng)用發(fā)生諸如數(shù)組越界、null值、對(duì)象重復(fù)釋放等問題導(dǎo)致的崩潰時(shí),Xcode通常只會(huì)跳到main()函數(shù)。而Exceptions Breakpoint會(huì)在異常發(fā)生的時(shí)候在異常的地方放一個(gè)斷點(diǎn),調(diào)試器不會(huì)再跳到main()函數(shù),而是停留在了異常發(fā)生的地方,而且大多數(shù)情況下Exceptions Breakpoint都會(huì)打印異常消息。碉堡了!
其他調(diào)試技巧備忘
1、啟用NSZombieEnabled ——— 定位野指針問題,只能檢測(cè)已經(jīng)釋放了對(duì)象的地址。
2、靜態(tài)分析 ——— 可以定位部分內(nèi)存泄露、空指針問題,比如傳入了null指針。
3、Instruments ——— 使用子工具Leaks可以定位循環(huán)引用問題。
4、block引用循環(huán)問題通常難以用工具檢測(cè)出來,可以在對(duì)象的- (void)dealloc方法中打印日志來判斷對(duì)象是否正常釋放。
5、條件斷點(diǎn) ——— 在普通斷點(diǎn)中設(shè)置一定的條件,滿足條件時(shí)斷點(diǎn)才會(huì)觸發(fā),適用于循環(huán)結(jié)構(gòu)中定位到具體某次循環(huán)。
6、符號(hào)斷點(diǎn) ——— 可以用來快速定位unrecognized selector send to instance問題。