Xcode 調試之 Breakpoint

NSLog 應該是最基本的調試方法,但是 NSLog 也有一些問題,比如

  • 需要提前設置宏,在 release 版本中避免瘋狂打印
  • NSLog 比較耗費資源,Apple 本身設計其為打印錯誤日志,是對系統級打印的封裝

為了避免這些問題,我們可以利用 Xcode 中的斷點調試工具調試,也可以利用 lldb 斷點調試,這篇我們先看看 Xcode 中的打斷點吧~

調試斷點,依賴于父進程和子進程之間的通信,打斷點實際是在被調試的程序中,改變斷點附近程序的代碼,這個斷點使得被調試的程序,暫時停止,然后發送信號給父進程(調試器進程),然后父進程能夠得到子進程的變量和狀態,達到調試的目的。

Breakpoint

打一個斷點誰都會,但是除了單單打斷點之外,我們還可以通過編輯這個斷點,設置一些觸發、過濾條件來調試代碼:

編輯 Breakpoint
Condition

設置條件斷點,寫一些簡單的判斷,使程序在滿足一定條件才會停下來

Ignore

可以忽略前n次,到n+1次再停下來

Action

給斷點設置一些事件,里面包含很多事件


Breakpoint 中的 Action 選項
AppleScript

AppleScript是蘋果公司開發的一種腳本語言,可以用來控制運行于Mac OS上的程序,也可以寫成獨立運行的Applet。類似于英語,直觀,易讀。
我們簡單設置一段AS:


在運行到斷點時,在當前應用輸出 Hello World!
停下時,Xcode 彈出 Hello World!
Capture GPU Frame

用于OpenGL ES調試,捕獲斷點處GPU當前繪制幀。

Debugger Command

這個與在控制臺中輸入 LLDB 命令一致,輸入 po + OC對象,打印這個OC對象,輸入 p + 基本數據類型變量,打印這個變量。
下一篇文章我會對這個方面進行總結,敬請期待。

Log Message

在 Log Message 中輸入命令,可以直接在控制臺輸出,有意思的是,還可以選擇 Speak message ,讓 siri 幫你讀出這些信息。


LogMessage 打印信息
Shell Command

在 Shell Command 中輸入Shell 命令,到此斷點時,會運行輸入的
Shell命令。

輸入ls,列出當前目錄下文件
Sound

還有一個比較好玩的 Action 是 Sound,它會在觸發斷點時發出響聲,我們可以在一些不能時刻關注到的代碼設置這個斷點,運行時,發出響聲提示我們一些信息。

設置當前如果斷網了,"叮"一聲

全局斷點

除了給特定代碼行設置斷點以外,我們還可以設置全局斷點,如圖:

全局斷點
Exception Breakpoint

異常斷點在每次程序發生了異常時,都會被中斷,一般用來捕獲一些未知的異常,這個大家應該都比較熟悉。

Symbolic Breakpoint

符號斷點可以在運行到設置的特定函數時,被中斷。

設置Symbolic 為viewWillAppear:就會在所有控制器調用viewWillAppear時中斷

講完了 Breakpoint 的調試技巧,下一篇我們說一下 lldb 的調試方法,總的來說,Breakpoint 能做的,lldb 也能做;而 lldb 能做的,Breakpoint 可不一定能做,所以敬請期待喲??

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 轉載 與調試器共舞 - LLDB 的華爾茲: https://objccn.io/issue-19-2/ 推薦:i...
    F麥子閱讀 3,361評論 0 10
  • 你是否曾經苦惱于理解你的代碼,而去嘗試打印一個變量的值? NSLog(@"%@", whatIsInsideThi...
    木易林1閱讀 968評論 0 4
  • 你是否曾經苦惱于理解你的代碼,而去嘗試打印一個變量的值? NSLog(@"%@", whatIsInsideThi...
    paraneaeee閱讀 1,220評論 0 7
  • [轉]淺談LLDB調試器文章來源于:http://www.cocoachina.com/ios/20150126/...
    loveobjc閱讀 2,594評論 2 6
  • 與調試器共舞 - LLDB 的華爾茲 nangege 2014/12/19 你是否曾經苦惱于理解你的代碼,而去嘗試...
    McDan閱讀 890評論 0 0