最近逛微博,看到一條 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 編程實戰》之調試