斷點(diǎn)和調(diào)試器交互
help命令
- help 列出所有命令
- help <commond>列出某個(gè)命令更多細(xì)節(jié),例如help print</commond>
- print 打印需要查看的變量,例如print totalCount
- print 還能使用簡(jiǎn)寫(xiě)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來(lái)代替
- e -p — dataArray 也可以打印對(duì)象的description方法的結(jié)果,等同于po
流程控制
- continue會(huì)取消暫停,繼續(xù)執(zhí)行下去到達(dá)下一個(gè)斷電,LLDB中使用process continue,別名continue,或者使用縮寫(xiě)c
- step over會(huì)執(zhí)行當(dāng)前這個(gè)函數(shù),然后繼續(xù)。LLDB中使用thread step-over,next或者縮寫(xiě)n
- step into指跳進(jìn)一個(gè)函數(shù)調(diào)試。LLDB中使用thread step in,step或者s
- step out會(huì)繼續(xù)執(zhí)行到下一個(gè)返回語(yǔ)句,然后再次停止
- thread return會(huì)在當(dāng)前斷點(diǎn)處直接返回出函數(shù),函數(shù)剩余部分不會(huì)被執(zhí)行。LLDB中使用thread return NO
斷點(diǎn)管理
- breakpoint list可以看到所有斷點(diǎn),簡(jiǎn)寫(xiě)br li
- breakpoint set可以創(chuàng)建斷點(diǎn),縮寫(xiě)br
在LLDB執(zhí)行C/Objective-C/C++/Swift
- 除了創(chuàng)建函數(shù),類(lèi),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
查看按鈕按下后誰(shuí)會(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í)候被重寫(xiě)了,監(jiān)視這個(gè)地址什么時(shí)候被寫(xiě)入
(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