NSLog 應該是最基本的調試方法,但是 NSLog 也有一些問題,比如
- 需要提前設置宏,在 release 版本中避免瘋狂打印
- NSLog 比較耗費資源,Apple 本身設計其為打印錯誤日志,是對系統級打印的封裝
為了避免這些問題,我們可以利用 Xcode 中的斷點調試工具調試,也可以利用 lldb 斷點調試,這篇我們先看看 Xcode 中的打斷點吧~
調試斷點,依賴于父進程和子進程之間的通信,打斷點實際是在被調試的程序中,改變斷點附近程序的代碼,這個斷點使得被調試的程序,暫時停止,然后發送信號給父進程(調試器進程),然后父進程能夠得到子進程的變量和狀態,達到調試的目的。
Breakpoint
打一個斷點誰都會,但是除了單單打斷點之外,我們還可以通過編輯這個斷點,設置一些觸發、過濾條件來調試代碼:
Condition
設置條件斷點,寫一些簡單的判斷,使程序在滿足一定條件才會停下來
Ignore
可以忽略前n次,到n+1次再停下來
Action
給斷點設置一些事件,里面包含很多事件
AppleScript
AppleScript是蘋果公司開發的一種腳本語言,可以用來控制運行于Mac OS上的程序,也可以寫成獨立運行的Applet。類似于英語,直觀,易讀。
我們簡單設置一段AS:
Capture GPU Frame
用于OpenGL ES調試,捕獲斷點處GPU當前繪制幀。
Debugger Command
這個與在控制臺中輸入 LLDB 命令一致,輸入 po + OC對象,打印這個OC對象,輸入 p + 基本數據類型變量,打印這個變量。
下一篇文章我會對這個方面進行總結,敬請期待。
Log Message
在 Log Message 中輸入命令,可以直接在控制臺輸出,有意思的是,還可以選擇 Speak message ,讓 siri 幫你讀出這些信息。
Shell Command
在 Shell Command 中輸入Shell 命令,到此斷點時,會運行輸入的
Shell命令。
Sound
還有一個比較好玩的 Action 是 Sound,它會在觸發斷點時發出響聲,我們可以在一些不能時刻關注到的代碼設置這個斷點,運行時,發出響聲提示我們一些信息。
全局斷點
除了給特定代碼行設置斷點以外,我們還可以設置全局斷點,如圖:
Exception Breakpoint
異常斷點在每次程序發生了異常時,都會被中斷,一般用來捕獲一些未知的異常,這個大家應該都比較熟悉。
Symbolic Breakpoint
符號斷點可以在運行到設置的特定函數時,被中斷。
講完了 Breakpoint 的調試技巧,下一篇我們說一下 lldb 的調試方法,總的來說,Breakpoint 能做的,lldb 也能做;而 lldb 能做的,Breakpoint 可不一定能做,所以敬請期待喲??