LLDB調試
是在開發中經常用到的一種調試手段,也非常的簡便快捷,那話又說回來了,LLDB
到底是什么呢?LLDB
是Low Level Debugger 輕量級的高性能調試器
,在正向開發與逆向都經常會用到LLDB調試
,下文中僅介紹正向開發中所涉及到的一些調試技巧
常用的LLDB
語法:
命令 | 效果 |
---|---|
p | 動態執行語句(expression的縮寫),內存操作(下同),打印對象內存信息 |
expression | 同上,可縮寫成exp |
call | 同上 |
po | print object 常用于查看對象簡要信息 |
image lookup -a 地址 | 可用于尋址(這個命令和圖片沒有任何關系) |
image list | 列出所有加載的模塊 縮寫im li |
image list -o -f | 模塊名 只列出輸入模塊名信息,常用于主模塊 |
bt | 查看當前調用棧 |
up | 查看上一個調用函數 |
down | 查看下一個調用函數 |
frame variable | 查看函數參數 |
frame select 標號 | 查看指定調用函數 |
thread info | 輸出當前線程信息 |
help 指令 | 查看指令信息 |
當我們在項目代碼中設置了斷點之后,就可以進行LLDB調試
了,現在讓我們來看一下每一條命令的具體用法:
p
:動態執行語句(expression的縮寫),內存操作(下同),打印對象全面的所有信息
p命令
p命令
1:表示對象 s 的內存地址
2:表示對象 s 所對應的isa指針
3:表示對象 s 的屬性
p、po、expression 、call
命令輸出對比
對比
由對比圖可以看出:
p、expression、call 輸出結果完全一致
【注意:call:一般只在不需要顯式輸出,或是無返回值時使用call,用于動態調試插入調用代碼】
po 則是輸出對象的簡要信息
e
:修改命令
e命令
由圖可以看出,原始的 name 屬性值為 “xiaoming”,
但是經過 e s.name = "123" 命令之后,
對象 s 的name屬性值變成了“123”
image
:可用于尋址(這個命令和圖片沒有任何關系) 這個功能很強大了 比如我們經常項目出現crash 控制臺上就會打印下面的信息 這個時候我們可以根據這個信息來準確找到閃退位置(雖然閃退原因頭部寫的很清楚了 但是假如這個文件有很多setValueForKey方法呢,我們一個個找起來太費勁 我們就可以通過image來準確定位)
image 命令
bt
:打印當前調用堆棧(crash堆棧),“bt all”可打印所有thread的堆棧
bt命令
up、down、frame info、thread info 命定
up、down、frame info、thread info 命定
help 命令
:查看更多命令
help命令
當我們在開發過程中,很多情況需要查看當前的參數傳遞、數據結構、以及crash時的定位信息等,如果只是通過NSLog進行打印,操作起來就太過于局限;這時如果結合使用
LLDB命令
進行調試就可以大大提升效率當然上面也只是對
LLDB
的簡單介紹,有興趣的猿友可以繼續深入研究