xcode 調試斷點

來源:互聯網
上載者:User

參考

[1] http://developer.apple.com/library/ios/#recipes/xcode_help-breakpoint_navigator/articles/about_breakpoint_navigator.html#//apple_ref/doc/uid/TP40010433-CH6-SW1

偵錯工具時,斷點是必不可少的工具,下面介紹一下斷點具體使用

1.普通斷點

如所示,在xcode編輯框左側點擊 就出現一個斷點,右擊出現 “編輯斷點”等選項。如中代碼所示,添加斷點後,每次for迴圈都會在NSLog 40行停住。

如果想在某一條件下 斷點才生效,則添加條件選項,右擊斷點,選擇編輯斷點,如所示,只有當item 為“three”時斷點才生效,中斷程式運行。

(BOOL)[item isEqualToString:@"three"] 前面的(BOOL)是必須的。否則console會提示類型不符號,導致條件不能生效。

從中可以看出,還可以設定忽略斷點次數,以及當斷點條件滿足時 要做的事情,圖中所示是  

po item 輸出 item變數的值  

bt 表示輸出 方法呼叫堆疊資訊

haha 表示用系統的PPS 語音讀出“haha”發音提示。

更多的gdb 或lldb命令,網上搜下,或者直接在命令列輸入help

當然條件斷點一般可以用以下方法替換


2.異常斷點(Exception breakpoint)

如下代碼所示,[mutDict setObject:value forKey:@"key"]; 會導致如下錯誤資訊,並且系統中斷在mian函數上,你雖然從錯誤資訊看出是 setObjectForKey 導致異常,但在一個工程中,用到setObjectForKey 可能有很多地方,你還是不能確定哪一行代碼導致的,這時就需要添加異常斷點。

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** setObjectForKey: object cannot be nil (key: key)'

*** First throw call stack:

(0x1c8d012 0x10cae7e 0x1d100de 0x2ede 0x2fc8 0xf3817 0xf3882 0x42a25 0x42dbf 0x42f55 0x4bf67 0x296b 0xf7b7 0xfda7 0x10fab 0x22315 0x2324b 0x14cf8 0x1be8df9 0x1be8ad0 0x1c02bf5 0x1c02962 0x1c33bb6 0x1c32f44 0x1c32e1b 0x107da 0x1265c 0x2672
0x25a5)

libc++abi.dylib: terminate called throwing an exception

- (void)testExceptionBreakPoint{NSString* value = nil;NSMutableDictionary* mutDict = [NSMutableDictionary dictionaryWithCapacity:0];[mutDict setObject:value forKey:@"key"];}

添加異常斷點如下

異常斷點建議是全域的,即在User下面,儲存在Xcode的設定資訊中,以後建立任意工程時 該斷點都時有效。建立斷點後,右擊選擇“move breakpoint to ” 選擇 “User”即可。

再次運行程式後,可以很簡單的找到 [mutDict setObject:value
forKey:@"key"];  之前的異常是這一行導致的。

3.符號斷點(symbolic breakpoint)

符號斷點 可以針對某一個方法設定斷點,不僅可以的是自己建立的類的方法,更重要的是系統SDK中的函數或方法也可以設定斷點。

比如為了在異常時設定斷點,我們知道系統會調用objc_exception_throw 函數,則只要建立 objc_exception_throw 的符號斷點,如下述所示。

運行後,如所示,也能輕鬆的找到 [mutDict setObject:value forKey:@"key"];   這一行代碼導致異常,如使用異常斷點時一致。

如果想為自己的類方法 設定符號斷點也可以,如所示,為類BI_TestClass 類的執行個體方法  - (void)method:(id)obj  建立了 符號斷點,減號(-)表示執行個體方法,加號(+)表示類方法。那麼在每次調用該方法時都會中斷。當然你也可以直接在該方法中設定一個普通斷點達到相同效果。

特別注意:-[BI_TestClass method:]  不需要 在引號內,雖然它Example 的格式是需要包含在雙引號內的,坑爹的Example 導致我剛開始一直設沒有效果。

其他常用的符號斷點 -[NSObject doesNotRecognizeSelector:]

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.