LLDB調試
是在開發中常常用到的一種調試手段,也很是的簡便快捷,那話又說回來了,LLDB
究竟是什麼呢?LLDB
是Low Level Debugger 輕量級的高性能調試器
,在正向開發與逆向都常常會用到LLDB調試
,下文中僅介紹正向開發中所涉及到的一些調試技巧 經常使用的LLDB
語法:express
命令 | 效果 |
---|---|
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調試
了,如今讓咱們來看一下每一條命令的具體用法:bash
p
:動態執行語句(expression的縮寫),內存操做(下同),打印對象全面的全部信息
1:表示對象 s 的內存地址
2:表示對象 s 所對應的isa指針
3:表示對象 s 的屬性
複製代碼
p、po、expression 、call
命令輸出對比由對比圖能夠看出:
p、expression、call 輸出結果徹底一致
【注意:call:通常只在不須要顯式輸出,或是無返回值時使用call,用於動態調試插入調用代碼】
po 則是輸出對象的簡要信息
複製代碼
e
:修改命令由圖能夠看出,原始的 name 屬性值爲 「xiaoming」,
可是通過 e s.name = "123" 命令以後,
對象 s 的name屬性值變成了「123」
複製代碼
image
:可用於尋址(這個命令和圖片沒有任何關係) 這個功能很強大了 好比咱們常常項目出現crash 控制檯上就會打印下面的信息 這個時候咱們能夠根據這個信息來準確找到閃退位置(雖然閃退緣由頭部寫的很清楚了 可是假如這個文件有不少setValueForKey方法呢,咱們一個個找起來太費勁 咱們就能夠經過image來準肯定位)bt
:打印當前調用堆棧(crash堆棧),「bt all」可打印全部thread的堆棧up、down、frame info、thread info 命定
help 命令
:查看更多命令LLDB命令
進行調試就能夠大大提高效率 固然上面也只是對
LLDB
的簡單介紹,有興趣的猿友能夠繼續深刻研究
參考文檔:www.jianshu.com/p/c91f843a6…數據結構