常用lldb指令

 

給函數設置斷點

breakpoint set -n test
breakpoint set -n touchesBegan:withEvent:
breakpoint set -n "-[ViewController touchesBegan:withEvent:]"
給指定函數地址加斷點
breakpoint set -a 函數地址

breakpoint set -r est (正則,包含est的函數都斷點)

breakpoint set -s 動態庫 -n 函數名

查看指令的用法
help breakpoint、help breakpoint set
expression --
執行一個表達式
也可簡寫爲e
expression self.view.backgroundColor = [UIColor redColor]
// 刷新界面
(lldb) expression -- (void)[CATransaction flush]
備註,如果是用地址的話一定要強轉
po [(UIView *)0x15dd0e080 nextResponder]

查看父類
po [0x1229eb200 superclass]
TBCBaseViewController
查看視圖結構
po [self.view recursiveDescription]

expression、expression --和指令print和p、call?的效果一樣
expression -O --和指令po的效果一樣

thread backtrace 
打印線程的堆棧信息
和指令bt的效果一樣

thread return []
讓函數直接返回某個值,不會執行斷點後面的代碼
frame variable []
例如可以寫 frame variable a
打印當前棧幀的變量
不帶參數就是打印所有

斷點調試
thread continue、continue、c 程序繼續運行
thread step-over、next、n 單步運行,把子函數當做整體一步運行
thread step-in、step、s 單步運行,遇到子函數會進入子函數
thread step-out、finish 直接執行完當前函數的所有代碼,返回到上一個函數
thread step-inst-over、nexti、ni
thread step-inst、stepi、si
si、ni和s、n類似
s、n?是源碼級別
si、ni?是彙編指令級別

breakpoint list 列出所有的斷點
breakpoint disable 斷點編號:禁用斷點
breakpoint enable 斷點編號:啓用斷點 
breakpoint delete 斷點編號:刪除斷點


breakpoint command add 斷點編號
給斷點預先設置需要執行的命令,到觸發斷點時,就會按順序執行
breakpoint command list 斷點編號
breakpoint command delete 斷點編號

內存斷點
watchpoint set variable 變量
watchpoint set variable self->age
watchpoint set expression &(self->_age)
同理還有這些
watchpoint list
watchpoint disable 斷點編號
watchpoint enable 斷點編號 
watchpoint delete 斷點編號 
watchpoint command add 斷點編號
watchpoint command list 斷點編號 
watchpoint command delete 斷點編號



image lookup
image lookup -t 類型 查找某個類型的信息(例如NSInteger)
image lookup -a 地址 根據內存地址查找在模塊中的位置(開發中程序運行崩潰,可用這個定位在哪一行) 
image lookup -n 符號或者函數名 查找某個符號或者函數位置

image list
image list -o -f 打印出模塊的偏移地址、全路徑

寄存器相關
dis -s -a 內存地址 查看內存 (disassemble --顯示彙編代碼 d di dis 等縮寫都可以)
讀取內存操作:
memory read/數量 _ 格式 _ 字節數 內存地址
或者
x/數量 _ 格式 _ 字節數 內存地址
格式
x :代表16進制
f :代表浮點數
d :代表10進制

字節大小
b :byte 代表1個字節
h :half word 代表2個字節
w :word 代表4個字節
g :giant word 代表8個字節

如:
memory read/1wx 0x7ffee14a5ba8
memory read/1wd 0x7ffee14a5ba8

用gdb查看內存
格式: x /nfu <addr>
說明
x 是 examine 的縮寫
n表示要顯示的內存單元的個數
f表示顯示方式, 可取如下值
x 按十六進制格式顯示變量。
d 按十進制格式顯示變量。
u 按十進制格式顯示無符號整型。
o 按八進制格式顯示變量。
b表示單字節,
h表示雙字節,
w表示四字節,
g表示八字節


po $x0:打印方法調用者
x/s $x1:打印方法名
po $x2:打印參數(以此類推,x3、x4也可能是參數)
如果是非arm64,寄存器就是r0、r1、r2


小技巧
 敲Enter,會自動執行上次命令
絕大部分指令都可以使用縮寫

 

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