LLDB調(diào)試一些常用命令和技巧
1.常用命令
help是幫助命令,會打印出一個(gè)command list,help + <command名稱>可以查看某一個(gè)命令的描述
LLDB有前綴識別,如next輸入n就行了,print輸入p,expression輸入e就可以.生成的$4是暫存在lldb的變量名.
p打印變量
po打印變量的description
p/x 1000打印1000的16進(jìn)制(十進(jìn)制d,二進(jìn)制t同理)
e int $a =2定義變量
e $a = 3修改變量(也可以修改斷點(diǎn)時(shí)的代碼中的變量)
流程控制
c(continue) 取消斷點(diǎn)的暫停 一直到下一個(gè)斷點(diǎn),對應(yīng)第一個(gè)按鈕
n(next) 向下執(zhí)行一行代碼,如果是函數(shù)則黑盒執(zhí)行,不會進(jìn)入函數(shù)
s(step) 進(jìn)入函數(shù)內(nèi)部,如果下一行不是函數(shù),那么n和s是一樣的
finish 跳出函數(shù)
thread return (+返回值) 可以主動給函數(shù)返回值并立即跳出函數(shù),返回值會在程序中起效 (例thread return NO thread return 110)
frame info 打印當(dāng)前的代碼函數(shù),文件等等信息
一個(gè)例子
//打印出keyWindow的信息
(lldb) po [[[UIApplication sharedApplication] keyWindow] recursiveDescription]
<UIWindow: 0x7f82b1fa8140; frame = (0 0; 320 568); gestureRecognizers = <NSArray: 0x7f82b1fa92d0>; layer = <UIWindowLayer: 0x7f82b1fa8400>>
| <UIView: 0x7f82b1d01fd0; frame = (0 0; 320 568); autoresize = W+H; layer = <CALayer: 0x7f82b1e2e0a0>>
//把window的view保存在lldb中
(lldb) eid$myView = (id)0x7f82b1d01fd0
//修改背景顏色
(lldb) e (void)[$myView setBackgroundColor:[UIColorblueColor]]
//但是只有程序繼續(xù)運(yùn)行之后才會看到界面的變化酪碘。因?yàn)楦淖兊膬?nèi)容必須被發(fā)送到渲染服務(wù)中朋譬,然后顯示才會被更新。渲染服務(wù)實(shí)際上是一個(gè)另外的進(jìn)程 (被稱作backboardd)這時(shí)執(zhí)行[CATransaction flush]方法開啟渲染
(lldb) e (void)[CATransaction flush]
//獲取導(dǎo)航控制器
(lldb) eid$nvc = [[[UIApplicationsharedApplication] keyWindow] rootViewController]
//可以創(chuàng)建一個(gè)新的vc
(lldb) e id$vc = [UIViewController new]
//push出來
(lldb) e (void)[vc animated:YES]
//渲染
(lldb) e (void)[CATransaction flush]