符號(hào)斷點(diǎn)輸入框中各字段說明
Symbol:填入你想設(shè)置斷點(diǎn)的方法
(例如:-[NSException raise]乒躺,-號(hào)是實(shí)例方法琅束,+號(hào)是類方法)扭屁。
你也可以輸入:objc_exception_throw
malloc_error_break //跟蹤調(diào)試釋放了2次的對(duì)象
-[NSObject doesNotRecognizeSelector:] //向某個(gè)object發(fā)送沒有的方法
Module:填入要設(shè)置斷點(diǎn)的方法或函數(shù)是否在位于dylib中,默認(rèn)不填涩禀。
Conditon:填入條件料滥,例如:(BOOL)[item isEqualToString:@”test”]前面的(BOOL)是必須的。否則console會(huì)提示類型不符號(hào)艾船,導(dǎo)致條件不能生效葵腹。意思是item(NSString)是test時(shí)停下。
同樣可以寫一下判斷的方法比如用來確定類類型的isKindOfClass:丽声,確定對(duì)象在繼承體系中的位置的isMemberOfClass:礁蔗,判斷一個(gè)對(duì)象是否能接收某個(gè)特定消息的respondsToSelector:,判斷一個(gè)對(duì)象是否遵循某個(gè)協(xié)議的conformsToProtocol:雁社,以及提供方法實(shí)現(xiàn)地址的methodForSelector:浴井。
Ignore:忽略幾次。
Action:可在程序斷點(diǎn)執(zhí)行后增加額外動(dòng)作(Applescript霉撵,捕捉動(dòng)畫幀速磺浙,調(diào)試器命令(lldb),輸入log記錄徒坡,終端命令(shell),播放聲音)
例如:Debugger Commond中可填入
po item 輸出 item變量的值
bt 表示輸出 方法調(diào)用堆棧信息
例如Xcode警告:CUICatalog:Invalid asset name supplied:
原因是+[UIImage imageNamed:]調(diào)用的時(shí)候, name為 nil 或者為空(@"")撕氧,?通過斷點(diǎn)查找所有+[UIImage imageNamed:]調(diào)用的時(shí)候, name參數(shù)是nil或者為空的地方;
操作:
1.在Xcode的Breakpoint Navigator點(diǎn)擊加號(hào), 選擇Add Symbolic Breakpoint.
2.右鍵選擇Breakpoint選擇Edit Breakpoint, 在Symbol填入+[UIImage imageNamed:], 在Condition填入[(NSString *)$arg3 length] == 0或者$arg3 == nil. 可以自己嘗試po $arg1,po $arg2試試看.
3.運(yùn)行程序, 直到程序進(jìn)入斷點(diǎn). 打開Debug Navigator觀察調(diào)用棧, 最頂部的一定是+[UIImage imageNamed:], 點(diǎn)擊調(diào)用棧下一條, 能夠看到有調(diào)用到imageNamed的代碼, 就是name為nil的地方.