LLDB调试方法

一、断点命令

1、设置断点,现用断点卡住程序,然后在输入

breakpoint set --file 文件名 --line 行数

br s -f 文件名 -l 行数

b 文件名:行数

上面三种方式均可设置文件行断点

设置所以方法断点:

breakpoint set --selector 方法名

br s -S 方法名

以上两种方式均可

2、查看断点:

breakpoint list

br l

会出来一个断点详细信息,每个断点后面都有关于断点的描述,

使用breakpoint set设置的断点是不显示在导航面板中的

3、删除断点

breakpoint delete 断点编号

br del 断点编号

4、单步进入

thread step-in

step

s

5、单步跳过

thread step-over

next

n

6、继续运行

thread continue

continue

c

每个功能均有多个命令可以实现,依次为简写,同时这些命令也均可以通过工具栏实现

二、观察点命令

观察点命令是在程序中对于某个要观察的变量设置一个观察点,当这个变量变化的时候程序就会挂起,与断点很相似,触发条件不同而已

1、设置观察点

watchpoint set variable 变量名

wa s v b

2、查看观察点

watchpoint list

watch l

3、删除观察点

watchpoint delete 观察点编号(list里面的编号)

三、查看变量和计算表达式命令

1、查看当前栈帧的所有本地变量

frame variable

fr v

查看某个具体变量

frame variable 变量名

fr v 变量名

p 变量名

2、查看全局变量,只能查到在当前栈中使用到全局变量

target variable

ta v

查看某个具体变量

target variable 变量名

ta v 变量名

3、计算基本数据类型表达式

expr (int)i*i

expr i*i

print i*i

p i*i

4、计算对象数据类型表达式

expr -o --((Note *)self.listData[0]).date

po ((Note *)self.listData[0])date

从数组self.listData中取得第一个元素,做一下强制类型转换,然后调用date属性,然后会输出该属性的值

三、断言

NSAssert(NO,@"duan'yan");第一个参数数布尔表达式,第二个是描述信息,参数后面的是格式化desc描述信息的,当布尔表达式为NO时会抛出异常,并且输出抛出异常的位置,例如:*** Assertion failure in -[ViewController clickBtn], /Users/zhaojing/Desktop/测试项目集合/BYTestSDWebImage/BYTestSDWebImage/ViewController.m:43

四、异常栈报告分析

1、当异常发生时,程序会抛出异常,会输出到异常窗口,窗口中的****First throw call stack:后面的内容就是异常栈信息。

2、每条栈信息构成:序列号   +  框架  + 方法所属类名  +  方法名  + 调用方法编译之后的代码偏移量

前面序列号 :是栈输出序列号,序列号越大代表越早被调用

序列号后面是调用方法所属框架

在后面就是调用方法所属的类名

调用的方法名

调用方法编译后的代码偏移量,很多人以为是行号,其实不是,对我们基本没用

栈信息是要从下往上看,程序运行的过程是从下面的方法调用项目的方法

在程序运行过程中,栈信息可能很长,我们不需要每一行都去看,只需关注自己的工程代码,先找到自己工程中的方法,找到那条语句看看是不是有问题,前提是别人提供给我们的框架是正确的。

五、查看设备上的应用程序

选择window----->Devices进入到设备页面,左边面板中选择设备,右边会显示设备的相关信息,

在Installed Apps中显示的是已经安装到设备上的应用,在这可以通过+和-安装和删除设备,在旁边设置按钮Show Container菜单是用于查看应用的沙箱目录(但是我测试没看到,只能下载来看)

Download Container 可以讲设备中的沙箱目录复制到当前的开发电脑上来,右击该文件,选择显示包内容,可以看到沙箱里面的内容

点击View Device Logs按钮,可以贷款设备日志界面,可以查看设备的信息,右栏会出现设备日志信息,左栏包括进程、类型和日志时间,如果是crash,代表应用崩溃,点击某个日志信息,右栏会显示详细的日志描述信息,其中包括跟踪异常栈的信息输出。

你可能感兴趣的:(LLDB调试方法)