由一條微博引發的 — Xcode LLDB 除錯斷點總結

Channnnne發表於2018-01-25

最近逛微博,看到一條 LLDB 除錯方法的微博,感覺是時候總結一下了,畢竟原文很簡短,沒有後續學習是看不懂的。簡書貼圖一直失敗,無語,現在沒有圖片就將就看吧。

微博原文 推特上Peter Steinberger分享了一個LLDB除錯列印一些型別的小訣竅. 不過馬上有人回覆了一個更方便的方法.詳情請戳原文.

微博截圖中更方便的方法中用到的知識點是符號斷點斷點動作斷點範圍中的 User。

  1. 符號斷點是什麼?如何使用? 符號斷點會在執行到特定符號時暫停程式(不管是你呼叫還是蘋果呼叫)。符號可以是一個方法名、類中的一個方法或者任何 C 方法(objc_msgSend)。
  • 指向 -[NSException raise] 的符號斷點與異常斷點一樣。
  • 指向 malloc_error_break 和 -[NSObject doesNotRecognizeSelector:] 的符號斷點對除錯與記憶體相關的崩潰很有幫助。
  1. 符號斷點的符號Symbol如何書寫?
  • 方法名:pathsMatchingExtensions:
  • 函式名:malloc_error_break
  • 指定類的方法名:減號(-)表示例項方法,加號(+)表示類方法 -[NSArray objectAtIndex:] -[UIViewController viewDidLoad]
  1. 斷點的條件表示式Condition如何書寫? i > 5000 i == 99 (BOOL)[item isEqualToString:@"three”],前面的(BOOL)是必須的,否則console會提示型別不符號,導致條件不能生效。

  2. 斷點的動作Action是什麼?斷點到達後觸發指定的動作。可以是 LLDB 命令,可以是 Python 指令碼等等。最常見的用法應該是不停機加 log message 了。

  3. 斷點範圍:Specifying the Scope of a Breakpoint斷點範圍

  • User:當前使用者所有的工程
  • Project:預設範圍,當前開啟的工程
  • Workspace:當前開啟的工作空間
  1. 共享斷點:將斷點提交到版本系統,斷點會儲存到工程檔案包的 xcshareddata 目錄,將該目錄提交到版本控制系統中即可共享。

  2. 觀察點:到達斷點時才能設定。觀察點是有個數限制的,在intel CPU上最大是4個,在ARM CPU上最大是2個。

參考: 蘋果官方斷點幫助 《iOS 程式設計實戰》之除錯

相關文章