- LLDB的语法
<command> [<subcommand> [<subcommand>...]] <action> [-options [option-value]] [argument [argument...]]
//<command>(命令)和<subcommand>(子命令):LLDB调试命令的名称。命令和子命令按层级结构来排列:一个命令对象为跟随其的子命令对象创建一个上下文,子命令又为其子命令创建一个上下文,依此类推。
//<action>:执行命令的操作
//<options>:命令选项
//<arguement>:命令的参数
//[]:表示命令是可选的,可以有也可以没有
- 当我们想打印一个对象的时候。需要使用-O命令选项
(lldb) expression -O -- self
<ViewController: 0x7f9000f17660>
expression(expression命令的作用是执行一个表达式,并将表达式返回的结果输出)
- 执行某个表达式
expression <cmd-options> -- <expr>
<cmd-options>:命令选项,一般情况下使用默认的即可,不需要特别标明。 --: 命令选项结束符,表示所有的命令选项已经设置完毕,如果没有命令选项,--可以省略 <expr>: 要执行的表达式
// 改变颜色 (lldb) expression -- self.view.backgroundColor = [UIColor redColor] // 刷新界面 (lldb) expression -- (void)[CATransaction flush]
- 将返回值输出
(lldb) expression -- self.view (UIView *) $1 = 0x00007fe322c18a10
p & print & call
- 这三个命令其实都是expression –的别名(–表示不再接受命令选项,详情见前面原始(raw)命令这一节)
(lldb) expression -- self.view (UIView *) $5 = 0x00007fb2a40344a0 (lldb) p self.view (UIView *) $6 = 0x00007fb2a40344a0 (lldb) print self.view (UIView *) $7 = 0x00007fb2a40344a0 (lldb) call self.view (UIView *) $8 = 0x00007fb2a40344a0 (lldb) e self.view (UIView *) $9 = 0x00007fb2a40344a0
- 这三个命令其实都是expression –的别名(–表示不再接受命令选项,详情见前面原始(raw)命令这一节)
po(LLDB为expression -O –定义了一个别名:po)
- 如果想了解,在LLDB控制台上输入:help expression即可查到expression所有的信息
thread backtrace & bt
- 有时候我们想要了解线程堆栈信息,可以使用thread backtrace thread backtrace作用是将线程的堆栈打印出来。
- 当发生crash的时候,我们可以使用thread backtrace查看堆栈调用
- LLDB还为backtrace专门定义了一个别名:bt
thread return
- Debug的时候,也许会因为各种原因,我们不想让代码执行某个方法,或者要直接返回一个想要的值。这时候就该thread return上场了。
thread return [<expr>] //thread return可以接受一个表达式
- Debug的时候,也许会因为各种原因,我们不想让代码执行某个方法,或者要直接返回一个想要的值。这时候就该thread return上场了。