Xcode 中斷點 簡介
本文于 1583 天之前發表,文章内容可能已經過時。
Xcode 中斷點 一些簡單的介紹
中斷點
中斷點(breakpoint)除了普通的中斷外,還有五種特殊的形式:
- Exception Breakpoint:程式碼出現問題,拋出異常時觸發。
- Symbolic Breakpoint:當執行某個符號時觸發。
- OpenGL ES Error Breakpoint:在 OpenGL ES 錯誤發生時觸發。
- Test Failure Breakpoint:測試斷言失敗的時候觸發。
- Swift Error Breakpoint:在 Swift 錯誤發生時觸發。
普通中斷點:
Condition:返回一個布林值,只有在布林值為 true 時才會觸發
Ignore:忽略前 n 次斷點,直到第 n+1 次遇到斷點才觸發。
Action:斷點觸發時,Xcode 執行的操作,如腳本等。
- AppleScript:用於執行腳本,如 display dialog “SwiftGO” 彈出對話框。
- Capture GPU Frame:攔截在斷點處 GPU 當前繪製的幀圖,用於 OpenGL ES 應用的調適。
- Debugger Command:相當於在控制台中輸入的 lldb 調適指令。
- Log Message:將自定義格式、内容的信息輸出到控制台,常用的占位符有:
%H(斷點第幾次觸發),%B(斷點所在的方法的名字) 和 @expr@(輸出expr的值)。 - Shell Command:接收命令文件以及相應的參數列表。Xcode 會異步執行 ShellCommand。
勾選 “Waituntildone” 表示等待 Shell 命令執行结束後再執行調適工作。 - Sound:觸發斷點的同時播放聲音。
- Automatically continue after evaluating actions:勾選這個選項後,斷點不會中斷程式運行。
Swift Error Breakpoint:
拋出一個繼承自 ErrorType 類型的錯誤時會觸發這個中斷點。
1 | enum ThisPersonError: ErrorType { |
通過編輯 Swift Error Breakpoint,可以指定響應什麼類型的異常。
Exception Breakpoint:
只在 Objective-C 或 C++ 中有用。比如下面這段程式碼:
1 | int main(int argc, const char * argv[]) { |
如果不添加 Exception Breakpoint,會執行到 @catch程式碼區域。這種斷點的編輯界面和以前不太一樣:
- Exception: 表示響應哪種語言的異常,可以是 Objective-C 或 C++
- Break:是在 throw 還是在 catch 中觸發這個異常
Symbolic Breakpoint:
符號斷點會在某個方法被調用時觸發:
如定義這樣的兩個函數:
1 | func burnAllCouples() { |
然後把 Symbol 設置成某個函數的名字:burnAllSingleDogs,這樣每次調用 burnAllSingleDogs 函數都會觸發這個中斷點
目前 Swift 中,Symbolic Breakpoint 一個比較大的問題是它不支持帶參數的方法名。
Test Failure Breakpoint
這在測試的斷言失敗時觸發:
1 | func testExample() { |
如這個測試斷言必定失敗,添加 Test Failure Breakpoint 後,程式將在 XCTAssert(1 == 0) 處中斷。