LLDB指令格式:
<command> [<subcommand> [<subcommand>...]] <action> [-options [option- value]] [argument [argument...]]
<command>
: 命令
[<subcommand> [<subcommand>...]]
:子命令
<action>
:命令操作
[-options [option- value]]
: 命令選項(xiàng)
[argument [argument...]]
:命令參數(shù)
LLDB指令格式中[](中括號(hào))
內(nèi)的指令可以沒有
比如給test
函數(shù)設(shè)置斷點(diǎn)
//breakpoint : 命令
//set : 子命令(或者說是動(dòng)作action)
// -n : name,函數(shù)名
// test : 參數(shù)
breakpoint set -n test
help指令
查看指令用法:
help breakpoint
help breakpoint set
expression指令
執(zhí)行一個(gè)表達(dá)式
expression
:命令選項(xiàng)
--
:命令選項(xiàng)結(jié)束符,表示所有的命令選項(xiàng)已經(jīng)設(shè)置完畢,如果沒有命令選項(xiàng),--
可以省略
:
需要執(zhí)行的表達(dá)式
expression self.view.backgroundColor = [UIColor redColor]
過掉23行的斷點(diǎn)就可以看到lldb
指令已經(jīng)生效
p
po
print
call
這幾個(gè)指令某種情況下是同義指令,沒有區(qū)別.注意區(qū)分如下指令:
p arr
p -O -- arr
expression arr
expression -O -- arr
與po arr
同義??????????????????
如上所示expression -O -- arr
指令想當(dāng)于NSLog(@"%@")
方式打印對(duì)象.即執(zhí)行該對(duì)象的description
方法.
主要的兩個(gè)指令:
p:后面可以接表達(dá)式,方法調(diào)用等
po:后面可以打印對(duì)象
thread backtrace指令
打印線程的堆棧信息和指令bt
的效果相同
thread return [<expr>]
:讓函數(shù)直接返回某個(gè)值,不會(huì)執(zhí)行斷點(diǎn)后面的代碼
frame variable[variable-name]
:打印當(dāng)前棧幀的變量
thread continue
|continue
| c
:程序繼續(xù)運(yùn)行
thread step-over
|next
| n
單步運(yùn)行,把子函數(shù)當(dāng)做整體異步執(zhí)行
thread step-in
step
s
:單步運(yùn)行,遇到子函數(shù)會(huì)進(jìn)入子函數(shù)
thread step-out
finish
:直接執(zhí)行完當(dāng)前函數(shù)的所有代碼,返回到上一個(gè)函數(shù)
si
ni
和s
n
類似:
s
n
是源碼級(jí)別
si
ni
是匯編指令級(jí)別