最近逛微博,看到一條 LLDB 除錯方法的微博,感覺是時候總結一下了,畢竟原文很簡短,沒有後續學習是看不懂的。簡書貼圖一直失敗,無語,現在沒有圖片就將就看吧。
微博原文 推特上Peter Steinberger分享了一個LLDB除錯列印一些型別的小訣竅. 不過馬上有人回覆了一個更方便的方法.詳情請戳原文.
微博截圖中更方便的方法
中用到的知識點是符號斷點、斷點動作和斷點範圍中的 User。
- 符號斷點是什麼?如何使用? 符號斷點會在執行到特定符號時暫停程式(不管是你呼叫還是蘋果呼叫)。符號可以是一個方法名、類中的一個方法或者任何 C 方法(objc_msgSend)。
- 指向 -[NSException raise] 的符號斷點與異常斷點一樣。
- 指向 malloc_error_break 和 -[NSObject doesNotRecognizeSelector:] 的符號斷點對除錯與記憶體相關的崩潰很有幫助。
- 符號斷點的符號Symbol如何書寫?
- 方法名:pathsMatchingExtensions:
- 函式名:malloc_error_break
- 指定類的方法名:減號(-)表示例項方法,加號(+)表示類方法 -[NSArray objectAtIndex:] -[UIViewController viewDidLoad]
-
斷點的條件表示式Condition如何書寫? i > 5000 i == 99 (BOOL)[item isEqualToString:@"three”],前面的(BOOL)是必須的,否則console會提示型別不符號,導致條件不能生效。
-
斷點的動作Action是什麼?斷點到達後觸發指定的動作。可以是 LLDB 命令,可以是 Python 指令碼等等。最常見的用法應該是不停機加 log message 了。
-
斷點範圍:Specifying the Scope of a Breakpoint斷點範圍
- User:當前使用者所有的工程
- Project:預設範圍,當前開啟的工程
- Workspace:當前開啟的工作空間
-
共享斷點:將斷點提交到版本系統,斷點會儲存到工程檔案包的 xcshareddata 目錄,將該目錄提交到版本控制系統中即可共享。
-
觀察點:到達斷點時才能設定。觀察點是有個數限制的,在intel CPU上最大是4個,在ARM CPU上最大是2個。
參考: 蘋果官方斷點幫助 《iOS 程式設計實戰》之除錯