1.常用命令
help是幫助命令,會打印出一個command list,help + <command名稱>可以查看某一個命令的描述
LLDB有前綴識別,如next輸入n就行了,print輸入p,expression輸入e就可以.生成的$4是暫存在lldb的變量名.
p打印變量
po打印變量的description
p/x 1000打印1000的16進制(十進制d,二進制t同理)
e int $a =2定義變量
e $a = 3修改變量(也可以修改斷點時的代碼中的變量)
流程控制
c(continue) 取消斷點的暫停 一直到下一個斷點,對應第一個按鈕
n(next) 向下執行一行代碼,如果是函數則黑盒執行,不會進入函數
s(step) 進入函數內部,如果下一行不是函數,那么n和s是一樣的
finish? 跳出函數
thread return (+返回值) 可以主動給函數返回值并立即跳出函數,返回值會在程序中起效 (例thread return NO ?thread return 110)
frame info 打印當前的代碼函數,文件等等信息
一個例子
//打印出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]]
//但是只有程序繼續運行之后才會看到界面的變化。因為改變的內容必須被發送到渲染服務中,然后顯示才會被更新。渲染服務實際上是一個另外的進程 (被稱作backboardd)這時執行[CATransaction flush]方法開啟渲染
(lldb) e (void)[CATransaction flush]
//獲取導航控制器
(lldb) eid$nvc = [[[UIApplicationsharedApplication] keyWindow] rootViewController]
//可以創建一個新的vc
(lldb) e id$vc = [UIViewController new]
//push出來
(lldb) e (void)[$nvc pushViewContoller:$vc animated:YES]
//渲染
(lldb) e (void)[CATransaction flush]