工欲善其事,必先利其器,強烈建議新手同學好好研究下XCode這個工具。比如Build Settings,Build Info Rules,Build Parse, Edit Scheme…
前言:這個Swift調試系列分為四篇
2015.12月和2016.1月主要更新iOS開發的設計模式和Instruments優化技巧,穿插著寫一些別的。
斷點是調試中經常用到的,讓代碼停止在錯誤出現的地方,看看變量以及上下文實際的變化,往往就能夠找到問題所在。
點擊左側部分就可以添加斷點,再單機可以禁用單個斷點
導航欄中的斷點列表
可以右鍵來禁用,編輯,刪除斷點。
讓我們來看看圖中的四個區域
我們著重來看下3,4區域,新手往往只會看變量,其實這裡有很多可以利用的信息
其中
A. 禁用,啟用所有斷點
B. 繼續執行
C. 跳過這一行
D. step in(例如進入到函數實現內部)
E. step out (退出step in)
F. 打開UI調試 (後問會詳細闡述)
G.模擬位置
H.選擇線程
I. 查看線程調用堆棧
其中I的截圖如下
舉個例子,我想停在第888次執行?總不能一次次的continue吧!
for var index = 0;index < 1000;index++ {
print(index)
}
右鍵斷點,選擇edit breakpoint
然後填寫條件
condition就是代碼觸發的條件
ignore就是在斷點觸發前忽略幾次
action是斷點觸發後,執行的LLDB動作,這裡很簡單就是打印當前的sum
options,執行完action後是否繼續執行
可以看到運行的截圖
接下來講的幾種斷點添加方式都是,在斷點導航底部,如圖添加
這個在Swift開發中很常用
添加一個Swift Error斷點
定義一個方法,來拋出Swift Error
func test() throws{
throw DemoError.Type1
}
enum DemoError: ErrorType {
case Type1
case TYpe2
}
然後,這樣調用
do{
try test()
}catch{
}
會發現,在Swift Error發生的時候,斷點觸發
當然,Swift Error斷點也支持編輯來捕獲指定類型的Error
為了方便讀者閱讀,圖片我沒加水印,轉發者請注明轉自 Leo的CSDN博客(http://blog.csdn.net/hello_hwc?viewmode=list)
在拋出異常的時候觸發
這個在iOS開發中很常用
有過iOS開發的都知道,Cocoa在錯誤的時候會拋出異常,而實用這個斷點,會幫助我們捕獲異常。
例如
隨便performSelector,會拋出異常
self.performSelector("abcdefg")
在添加了All Exception後,會停在這裡
停在不方便直接加斷點的地方
例如,停在
-[NSObject setValue:forUndefinedKey:]
如圖
然後,這樣調用
self.setValue("Dta", forUndefinedKey: "dagd")
會發現斷點觸發
這個就是使用XCTest框架來測試的時候,當Test Case的Assert失敗的時候觸發的斷點。這裡不截圖了
紅圈中左邊是預覽,右邊是打印Description
如何打開UI調試
圖中的紅圈部分,點擊後,整個調試區域如圖
其中
查看AutoLayout約束
右鍵某一個View
然後選擇Show Constraints,
注意,第一張圖右上角的地址
0x7f8169e7daa0
這裡先記著,這個地址對LLDB的調試很有用,下一篇我會講到