Xcode debug總結
參考公眾號:WeMobileDev
一、斷點
斷點是我們平時開發,很重要的除錯手段,多掌握幾種斷點的使用,會明顯提高我們的開發效率。
1.普通斷點
不是很想說這個,大家最常用到的,直接command + \,更直接的在編輯區域左邊行號部分單擊。
我不會把斷點打在block的呼叫那裡,因為會斷兩次,一次在呼叫,一次在block塊裡面。
2.條件斷點
如果沒有條件斷點,我們通常會寫if,在裡面加log並且新增斷點。
條件斷點相對於普通斷點只多了一個條件,斷點處右鍵()--> edit breakpoint,新版本的xcode可以直接雙擊斷點進行編輯:

新增條件
條件斷點在迴圈裡面,只處理一種情況時比較有用。或者除錯一些因為資料問題導致的崩潰時,很有用。
3.符號斷點
符號斷點其實就是對一個特定的函式名,進行斷點。這裡的方法,可以是OC方法名,也可以是C++的函式名。
在導航欄的斷點頁,點選左下角的+號,選中Symbolic Breakpoint... ,就添加了一個符號斷點


可以只是一個方法名,也可以是[class method]的格式,只斷點特定類中的方法,如下所示,會斷點專案中所有的clickBtn方法:

斷點所有的clickBtn方法
符號斷點在除錯一些沒有原始碼的模組時比較有用,比如系統的庫或者一些第三方庫,在相應函式下斷點,可以大概摸清其執行流程。同時可以在斷點處檢視相應的引數資訊。
4.異常斷點
類似於新增符號斷點的流程,在導航欄的斷點頁,點選左下角的+號,選中Exception Breakpoint... ,就添加了一個異常斷點。

異常斷點
有些第三方,會報C++的異常,但是並不會引起程式崩潰,所以我們可以選擇OC異常來避免沒有要的情況。
5.watch斷點
顧名思義,watch斷點,就是在某個變數發生改變時觸發的斷點。
在xcode的watch視窗-->右鍵需要watch的變數---> watch "__變數名"

watch斷點
被watch的變數,在發生變化時,會觸發斷點,這在我們監聽時是非常有用的。
需要注意的是,watch斷點在arm CPU上最大個數是兩個
6.執行緒斷點
這個就比較生僻了,實際開發過程中,也基本不會遇到。
設定也比較複雜,控制檯輸出:
breakpoint set -f 檔名 -l 行號 -t 執行緒id
則會在指定執行緒斷點。
二、斷點後的action
斷點後的action,其實就是斷點被觸發時執行的操作
進入斷點編輯介面,點選add action。

螢幕快照 2018-10-25 下午12.26.19.png
action型別有很多種,常用的debugger command,可以po變數的值。或者log message,直接輸出資訊。
勾選"Automatically continue after evaluating actions"後,會跳過斷點,只執行action操作。
三、斷點除錯常用命令
1.p、po命令
用p命令檢視基本資料型別的值
用po命令檢視OC物件
2.expr/expression命令
用來動態修改變數的值,後面跟一個賦值指令
3.call命令
除了動態修改變數的值以外,xcode還支援動態呼叫方法。可以在不增加程式碼,不重新編譯的情況下,呼叫方法。
如:call [self layoutSubview];