iOS調試 LLDB使用

我們職責是開發iOS應用,我們要做的就是生產bug和解決bug,調試對於每一個開發人員來說都是亙古不變的操作。如何高效調試提高我們的裝X技能了,所以掌握Xcode的LLDB最爲重要。

LLDB

首先瞟一眼LLDB長啥樣,如下圖:
LLDB調試
LLDB 是一個有着 REPL 的特性和 C++ 、Python 插件的開源調試器。

LLDB命令結構

<command> [<subcommand> [<subcommand>...]] <action> [-options [option-value]] [argument [argument...]]

其中:

  • command、subcommand:LLDB調試命令的名稱。命令和子命令按層級結構來排列:一個命令對象爲跟隨其的子命令對象創建一個上下文,子命令又爲其子命令創建一個上下文,依此類推。
  • action:命令操作,想在前面的命令序列的上下文中執行的一些操作。
  • options:命令選項,行爲修改器(action modifiers)。通常帶有一些值。
  • argument:命令參數,根據使用的命令的上下文來表示各種不同的東西。
  • []:表示命令是可選的,可以有也可以沒有。
    比例 po isFinish, po就是命令操作(print -object 簡寫), isFinish就是命令參數

原始命令

原始命令會將命令後面所有東西當做參數處理,很多原始命令也可以帶命令選項,但是需要加-命令選項 -- 命令參數區分, 注意–後的空額

(lldb) expression -o -- aTureValue
true
// 錯誤示範
(lldb) expression -o --aTureValue
error: <EXPR>:3:3: error: consecutive statements on a line must be separated by ';'
-o --aTureValue
  ^
  ;

常用命令

命令 全命令 介紹
help - 命令提示,會羅列所有命令,非常有用,所有命令忘記了。有它就可以找其他命令了
a apropos 命令輔助,apropos 關鍵字可以搜索出相關的命令
e、ex、exp … expression 調試時動態執行表達式,並將結果打印出來,比如值動態更改,UI更改
vo/po -/print -object 與expr類似,打印對象,會調用description方法, 推薦使用vo更快,信息更全
v/p -/print print(type)表達式, 簡單打印推薦使用v
call - 調用方法
bt thread backtrace 打印調用堆棧, 查看當前堆棧方法調用非常有用

實例技巧

調試UI

如果在運行界面得時候,有時候需要小調界面,常常需要寫代碼,然後重新編譯,走流程,如果界面邏輯很深則需要很多時間。其實在斷點調試的時候就可以執行表達式,刷新界面。

關鍵代碼

// 先執行修改表達式
expression  XXX
// 最後刷新[一定要執行纔有效果]
expression CATransaction.flush()

修改背景色爲紅色

修改前
修改前
修改
修改後
修改後

Tips: 這個調試在viewDidAppear(比如在viewDidLoad斷點執行改變UI)執行之前不會立即有效,其他大部分刷新立即有效。

參考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章