Xcode调试

Xcode调试技巧

日志输出&LLDB

什么是LLDB呢:它是一个有着 REPL 的特性和 C++ ,Python 插件的开源调试器。LLDB 绑定在 Xcode 内部,存在于主窗口底部的控制台中。调试器允许你在程序运行的特定时暂停它,你可以查看变量的值,执行自定的指令,并且按照你所认为合适的步骤来操作程序的进展。我们可以简单的理解成它是一个调试器

1 命令行LLDB的出现

如下图,调试过程中程序运行到断点处时,控制台的右边会出 现“lldb”。

2 常用的命令

1 help
断点时,控制台输入”help“,回车,就能看到lldb命令及介绍
help
2 print
打印 常用p 代替
p
3 prin object
打印对象的详细信息 常用 po 代替
po
4 expression
可以在当前位置改变程序实际参数的值(不用重新运行项目) 使用过程中我们可以直接用 expr来代替expression。
expression
5 call
call
一般调用没有返回值的方法时使用call 例如 在viewDidLoad中断点,然后输入

1
call [self.view setBackgroundColor:[UIColor redColor]]

继续运行,view的背景就变成红色呢,很方便

6 image

mage list 查看工程中使用的库

image lookup –address 0x000000010e0979ac 程序崩溃的时候定位,查看具体报错位置 (不太好用)

断点

断点里面根据作用和功能也有很多种类:普通断点、条件断点、异常断点、符号断点等

普通断点

条件断点

打上断点之后,对断点进行编辑,设置相应过滤条件。单击右键会弹出选项框:

编辑断点

1
2
3
4
5
6
7
Edit BreakPoint... :编辑断点。
Disable  BreakPoint :断点失效。(相当于上边说到的单击断点变成浅蓝色,断点失效)
Delete BreakPoint :删除断点。
Reveal in BreakPoint Navigator :在左边的断点树状结构表明该断点。

Edit BreakPoint。这里面设置断点的筛选条件(双击断点也可以快速进入编辑断点的对话框)。

设置断点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
【1】Condition:返回一个布尔值,当布尔值为真触发断点,一般里面我们可以写一个表达式。
【2】Ignore:      忽略前N次断点,到N+1次再触发断点。
【3】Action:      断点触发事件,分为六种:
           <1>  AppleScript:执行脚本。
           <2>  Capture GPU Frame:用于OpenGL ES调试,捕获断点处GPU当前绘制帧。 
           <3>  Debugger Command:和控制台中输入LLDB调试命令一致。
           <4>  Log Message:输出自定义格式信息至控制台。
           <5>  Shell Command:接收命令文件及相应参数列表,Shell Command是异步执行的,只有勾选“Wait until done”才会等待Shell命令执行完在执行调试。
            <6>  Sound:断点触发时播放声音。
【4】Options(Automatically continue after evaluating actions选项):选中后,表示断点不会终止程序的运行。

异常断点 Exception Breakpoint(全局断点)

全局断点
同样的,全局断点也是可以编辑的,单击右键或者双击断点就会弹出编辑框,编辑的项目和上述是一样的。

符号断点 Symbolic Breakpoint

条件断点

4、监控断点

监控断点
我们调试程序的大部分时候都是为了监控某个变量的变化,在代码中变量出现的地方添加断点不仅累而且还可能漏掉,事后还得一个一个删掉,实在很累。
我们可以通过为变量添加监控断点来简单地做到这一点。找到变量第一次出现的地方,添加一个普通断点,进入 debug 模式后在 Variables View 中右键变量,选择 Watch 变量名。这样,每一次该变量被改变都会触发断点告知我们

更详细