常用命令
expression
expression命令的作用是執(zhí)行一個表達式件舵,并將表達式返回的結(jié)果輸出薄霜。expression的完整語法是這樣的:
expression <cmd-options> -- <expr>
expression <命令選項> “-- --”分隔符 執(zhí)行的參數(shù)或表達式
對應的例子如下:
(lldb) expression -O -- self
<ViewController: 0x7f9000f17660>
expression是lldb里面最重要的命令普碎。他能實現(xiàn)2個非常重要的功能:
- 執(zhí)行表達式艾帐。
在程序暫停時,可以通過lldb調(diào)試器直接修改頁面屬性跷敬,而不需要重新運行程序
// 改變顏色
(lldb) expression -- self.view.backgroundColor = [UIColor redColor]
// 刷新界面
(lldb) expression -- (void)[CATransaction flush]
- 輸出返回值
(lldb) expression -- self.view
(UIView *) $1 = 0x00007fe322c18a10
expression --
的別名(-- --表示不再接受命令選項)是對expression --
的一層封裝讯私,分別為p、print西傀、call
斤寇。
(lldb) p self.count
(CGFloat) $1 = 30
(lldb) print self.count
(CGFloat) $1 = 30
(lldb) call self.count
(CGFloat) $1 = 30
(lldb) expression -- self.count
po
在OC里所有的對象都是用指針表示的,所以一般用p拥褂、print娘锁、call、expression --
打印的時候肿仑,打印出來的是對象的指針致盟,而不是對象本身。如果我們想打印對象尤慰。我們需要使用命令選項:-O
馏锡。為了更方便的使用,lldb為expression -O --
定義了一個別名:po
(lldb) p self
(SingletonViewController *) $3 = 0x00007fda32a8f9d0
(lldb) po self
<SingletonViewController: 0x7fda32a8f9d0>
breakpoint
1.breakpoint set
斷點設(shè)置伟端,用于斷點設(shè)置的方式有多種 分別如下:
- 使用
-n
根據(jù)方法名設(shè)置斷點
(lldb) breakpoint set -n viewWillAppear:
給所有類中的viewWillAppear:設(shè)置一個斷點 - 使用
-f
指定文件
(lldb) breakpoint set -f ViewController.m -n viewDidLoad
- 使用-l指定文件某一行設(shè)置斷點
(lldb) breakpoint set -f ViewController.m -l 38
- 使用-c設(shè)置條件斷點
text:方法接受一個ret的參數(shù)杯道,我們想讓ret == YES的時候程序中斷
(lldb) breakpoint set -n text: -c ret == YES
- 使用-o設(shè)置單次斷點
如果剛剛那個斷點我們只想讓他中斷一次
(lldb) breakpoint set -n text: -o
2.breakpoint delete
刪除斷點
刪除斷點ID為:1的斷點
(lldb) breakpoint delete 1
刪除工程中所有的斷點
(lldb) breakpoint delete
About to delete all breakpoints, do you want to do that?: [Y/n] y
All breakpoints removed. (1 breakpoint)
- 強制所有的斷點,忽略提示
(lldb) breakpoint delete -f
All breakpoints removed. (1 breakpoint)
watchpoint
如果說breakpoint
是對方法生效的斷點责蝠,watchpoint
就是對地址生效的斷點
在開發(fā)過程中党巾,平時我們簡稱一個屬性的變化通常是使用屬性的set方法,如果屬性沒有經(jīng)過set方法霜医,是直接通過self->屬性直接修改的話齿拂,用set方法就不行了,此時可以通過watchpoint
命令監(jiān)聽屬性的內(nèi)存地址肴敛,一旦address的內(nèi)容被修改署海,程序就會自動斷開吗购。
1.watchpoint set
設(shè)置觀測點
-
watchpoint set variable <變量參數(shù)>
為變量設(shè)置觀測點
(lldb) watchpoint set variable self->_string
-
watchpoint set expression <變量地址參數(shù)>
為變量地址設(shè)置觀測點
(lldb) p &_model
(Modek **) $3 = 0x00007fe0dbf23280
(lldb) watchpoint set expression 0x00007fe0dbf23280
-
watchpoint command add
為觀測點添加命令
為ID為:1的觀測點添加一條 命令
watchpoint command add -o 'po self' 1
為ID為:1的觀測點添加多條命令
(lldb) watchpoint command add 1
Enter your debugger command(s). Type 'DONE' to end.
> po self
> continue
> DONE
-
watchpoint command list
查詢觀測點命令列表
(lldb) watchpoint command list 1
查詢觀測點ID為:1的觀測點,命令列表 -
watchpoint command delete
(lldb) watchpoint command delete 1
刪除觀測點ID為:1的觀測點的命令列表 -
watchpoint list
查詢工程中的所有觀測點列表 -
watchpoint delete
刪除觀測點ID為:1的觀測點
(lldb) watchpoint delete 1
刪除工程中的觀測點
(lldb) watchpoint delete
About to delete all watchpoints, do you want to do that?: [Y/n] y
All watchpoints removed. (2 watchpoints)
Extension
在調(diào)試器中輸入 e @import UIKit 可以打印出view的frame
(lldb) e @import UIKit
(lldb) po self.view.frame
(origin = (x = 0, y = 0), size = (width = 375, height = 667))