LLDB命令
- expression :作用是执行一个表达式,并将表达式返回的结果输出
- 执行某个表达式
// 我们在代码运行过程中,可以通过执行某个表达式来动态改变程序运行的轨迹。假如我们在运行过程中,突然想把self.view颜色改成红色,看看效果。我们不必写下代码,重新run,只需暂停程序,用expression改变颜色,再刷新一下界面,就能看到效果
// 改变颜色 (lldb) expression -- self.view.backgroundColor = [UIColor redColor]
// 刷新界面 (lldb) expression -- (void)[CATransaction flush]
- 将返回值输出
// 也就是说我们可以通过expression来打印东西。假如我们想打印self.view:
// (lldb) expression -- self.view
// (UIView *) $1 = 0x00007fe322c18a10
-
p & print & call
-
print
: 打印某个东西,可以是变量和表达式 -
p
: 可以看做是print
的简写 -
call
: 调用某个方法 - 表面上看起来他们可能有不一样的地方,实际都是执行某个表达式(变量也当做表达式),将执行的结果输出到控制台上。所以你可以用
p
调用某个方法,也可以用call
打印东西
-
-
po
- OC里所有的对象都是用指针表示的,所以一般打印的时候,打印出来的是对象的指针,而不是对象本身。如果我们想打印对象。我们需要使用命令选项:-O。为了更方便的使用,LLDB为
expression -O --
定义了一个别名:po
。
- OC里所有的对象都是用指针表示的,所以一般打印的时候,打印出来的是对象的指针,而不是对象本身。如果我们想打印对象。我们需要使用命令选项:-O。为了更方便的使用,LLDB为
-
thread(thread backtrace & bt)
- 有时候我们想要了解线程堆栈信息,可以使用
thread backtrace
-
thread backtrace
作用是将线程的堆栈打印出来。我们来看看他的语法
thread backtrace [-c <count>] [-s <frame-index>] [-e <boolean>] //thread backtrace后面跟的都是命令选项: //-c:设置打印堆栈的帧数(frame) //-s:设置从哪个帧(frame)开始打印 //-e:是否显示额外的回溯 //实际上这些命令选项我们一般不需要使用。
- 当发生crash的时候,我们可以使用
thread backtrace
查看堆栈调用。LLDB还为backtrace专门定义了一个别名:bt
,他的效果与thread backtrace
相同,如果你不想写那么长一串字母,直接写下bt
即可。
- 有时候我们想要了解线程堆栈信息,可以使用
-
thread return
- Debug的时候,也许会因为各种原因,我们不想让代码执行某个方法,或者要直接返回一个想要的值。这时候就该使用
thread return
。//thread return [<expr>] //thread return可以接受一个表达式,调用命令之后直接从当前的frame返回表达式的值。 // e.g. // 方法 -(BOOL)someth{ return YES; } // 我们可以改变其返回值 //(lldb) thread return NO
- Debug的时候,也许会因为各种原因,我们不想让代码执行某个方法,或者要直接返回一个想要的值。这时候就该使用
Chisel
- 介绍
Chisel是Facebook发布的LLDB命令的集合,用来帮助调试iOS应用程序。 - 安装
// 安装需要使用到Homebrew,如果还没有安装Homebrew,可以使用下面的命令安装,如果你已经安装了,可以跳过这一步
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew update
brew install chisel
- 在
~
路径下创建.lldbinit
文件
touch .lldbinit
open .lldbinit
- 输入命令
command script import /usr/local/opt/chisel/libexec/fblldb.py
- 更新
brew upgrade chisel
- 相关使用可以去其GitHub上面看看:Chisel