iOS開(kāi)發(fā)開(kāi)發(fā)者掌握斷點(diǎn)調(diào)試功能非常重要,基于Xcode9來(lái)說(shuō)說(shuō)我認(rèn)識(shí)的Breakpoint。
如下圖,點(diǎn)擊行號(hào)就可以生成一個(gè)斷點(diǎn),一個(gè)斷點(diǎn)有四個(gè)基本功能:
- 編輯斷點(diǎn)
- 使斷點(diǎn)無(wú)效或有效(點(diǎn)擊斷點(diǎn)有同樣的效果)
- 刪除斷點(diǎn)(把斷點(diǎn)往代碼區(qū)拖動(dòng)松開(kāi)有同樣的效果)
- 在導(dǎo)航器中顯示斷點(diǎn)

調(diào)試的時(shí)候可以根據(jù)需求編輯斷點(diǎn),點(diǎn)擊Edit Breakpoint出現(xiàn)如下圖的功能:

1. Condition
可以輸入一個(gè)條件表達(dá)式,例如a==0,如果條件滿足了,就會(huì)觸發(fā)斷點(diǎn)
2. Ignore
這里可以設(shè)置忽略斷點(diǎn)的次數(shù),比如設(shè)置2,第三次執(zhí)行到這里的代碼,就會(huì)觸發(fā)斷點(diǎn)
3. Action
點(diǎn)擊Add Action,然后Action有6個(gè)選擇項(xiàng),如下圖:

- AppleScript
- Capture GPU Frame
- Debugger Command
- Log Message
- Shell Command
- Sound
功能Debugger Command和Log Message是比較常用的功能
Debugger Command 可以輸入LLDB命令

控制臺(tái)輸出:

功能Log Message:
- %B輸出斷點(diǎn)的名稱(chēng)
- %H輸出斷點(diǎn)執(zhí)行的次數(shù)
- @@之間輸入表達(dá)式

控制臺(tái)輸出:

Options
勾選Automatically continue after evaluating actions之后程序會(huì)在斷點(diǎn)產(chǎn)生后繼續(xù)運(yùn)行。
Xcode還提供一些其他斷點(diǎn):
- Swift Error Breakpoint
- Exception Breakpoint
- Sysbolic Breakpoint
- OpenGL ES Error Breakpoint
- Constraint Error Breakpoint
-
Test Failure Breakpoint
屏幕快照 2018-07-26 16.00.19.png
Swift Error Breakpoint
Swift中使用throw,會(huì)觸發(fā)斷點(diǎn)
Exception Breakpoint
當(dāng)程序拋出異常的時(shí)候會(huì)觸發(fā)斷點(diǎn)。部分錯(cuò)誤會(huì)斷點(diǎn)在發(fā)生錯(cuò)誤的代碼。數(shù)組越界等會(huì)崩潰到main.m,不能定位到具體的代碼,使用Exception Breakpoint就能定位到具體的代碼。
Sysbolic Breakpoint

Symbol
OC,C,C++方法,函數(shù)都會(huì)觸發(fā)斷點(diǎn)。C,C++函數(shù)只需要寫(xiě)函數(shù)名Module
模塊篩選
OpenGL ES Error Breakpoint
主要用來(lái)調(diào)試OpenGL,沒(méi)有研究其用法
Constraint Error Breakpoint
用來(lái)調(diào)試約束的,沒(méi)有研究其用法
Test Failure Breakpoint
在test測(cè)試時(shí)候,assertion失敗時(shí)觸發(fā)斷點(diǎn)。
Xcode也包含一些輔助的調(diào)試工具:

- 啟用、禁用斷點(diǎn)調(diào)試
- 繼續(xù)執(zhí)行
- 單步執(zhí)行
- 進(jìn)入函數(shù)
- 跳出函數(shù)
- UI調(diào)試
- 選擇線程
