斷點(diǎn)和調(diào)試器交互
help命令
- help 列出所有命令
- help <commond>列出某個(gè)命令更多細(xì)節(jié)御板,例如help print
- print 打印需要查看的變量,例如print totalCount
- print 還能使用簡(jiǎn)寫prin, pri, p
- po(print object)可以打印對(duì)象的description方法的結(jié)果
- 打印不同格式可以用p/x number打印十六進(jìn)制御蒲,p/t number打印二進(jìn)制缩举,p/c char打印字符垦梆。這里是完整清單<https://sourceware.org/gdb/onlinedocs/gdb/Output-Formats.html>
expression
- expression 可以改變一個(gè)值匹颤,例如expression s
- expression可以使用e來代替
- e -p — dataArray 也可以打印對(duì)象的description方法的結(jié)果,等同于po
流程控制
- continue會(huì)取消暫停奶赔,繼續(xù)執(zhí)行下去到達(dá)下一個(gè)斷電惋嚎,LLDB中使用process continue,別名continue站刑,或者使用縮寫c
- step over會(huì)執(zhí)行當(dāng)前這個(gè)函數(shù)另伍,然后繼續(xù)。LLDB中使用thread step-over绞旅,next或者縮寫n
- step into指跳進(jìn)一個(gè)函數(shù)調(diào)試摆尝。LLDB中使用thread step in,step或者s
- step out會(huì)繼續(xù)執(zhí)行到下一個(gè)返回語句因悲,然后再次停止
- thread return會(huì)在當(dāng)前斷點(diǎn)處直接返回出函數(shù)堕汞,函數(shù)剩余部分不會(huì)被執(zhí)行。LLDB中使用thread return NO
斷點(diǎn)管理
- breakpoint list可以看到所有斷點(diǎn)晃琳,簡(jiǎn)寫br li
- breakpoint set可以創(chuàng)建斷點(diǎn)讯检,縮寫br
在LLDB執(zhí)行C/Objective-C/C++/Swift
- 除了創(chuàng)建函數(shù),類卫旱,block等其它的都可以做到
- 使用e進(jìn)行操作人灼,p進(jìn)行打印顯示結(jié)果
在調(diào)試器中直接更行UI
(lldb) e id $myView = (id)0x7f82b1d01fd0
(lldb) e (void)[$myView setBackgroundColor:[UIColor blueColor]]
(lldb) e (void)[CATransaction flush]
查找Button的target
查看按鈕按下后誰會(huì)接收到按鈕發(fā)出的action
(lldb) po [$myButton allTargets]
{(
<MagicEventListener: 0x7fb58bd2e240>
)}
(lldb) po [$myButton actionsForTarget:(id)0x7fb58bd2e240 forControlEvent:0]
<__NSArrayM 0x7fb58bd2aa40>(
_handleTap:
)
觀察實(shí)例變量變化
想監(jiān)視vMain變量什么時(shí)候被重寫了,監(jiān)視這個(gè)地址什么時(shí)候被寫入
(lldb) p (ptrdiff_t)ivar_getOffset((struct Ivar *)class_getInstanceVariable([MyView class], "vMain"))
(ptrdiff_t) $0 = 8
(lldb) watchpoint set expression -- (int *)$myView + 8
Watchpoint created: Watchpoint 3: addr = 0x7fa554231340 size = 8 state = enabled type = w
new value: 0x0000000000000000