初识LLDB
如果你在平时的开发中从未使用过调试器,那你恐怕不知道一个调试器的作用有多大。你可能只满足于通过printf
或者NSLog
输出信息用于调试。但你只要试着尝试在调试中开始使用调试器LLDB,你会马上感受到调试器给你带来的便利。
LLDB是LLVM下的调试器。Xcode从4.0开始编译器开始改用LLVM,相应的调试器也从gdb改为LLDB。而从 Xcode5.0开始所有工程也被自动设置为使用LLDB。下面本文从初学者的角度讲解在日常的开发中如何使用LLDB以及LLDB常用的命令。
你可能从未使用过LLDB,那让我们先来热热身。 在调试器中最常用到的命令是p(用于输出基本类型)或者po(用于输出 Objective-C 对象)。如下,你可以通过输入po 和 view 来输出 view 的信息:
什么?在什么地方可以输入这个命令?Yeah,前提,我们需要先设置一个断点。
比如:你可能需要的是 view 下 subview 的数量。由于 subview 的数量是一个 int 类型的值,所以我们使用命令
p
:是不是很简单?
细心的朋友可能会发现输出的信息中带有$1、$2的字样。实际上,我们每次查询的结果会保存在一些持续变量中($[0-9]+),这样你可以在后面的查询中直接使用这些值。比如现在我接下来要重新取回$1的值:
po 和 p 的区别 应该是一个可以输出对象 一个只能输出c类型数据,有错拍砖
常用命令
-
expr (expression)
可以在调试时动态执行指定表达式,并将结果打印出来。常用于在调试过程中修改变量的值。运行至断点时 输入expr i = 8
bt
显示当前线程的堆栈 .bt all
显示线程所有堆栈-
image
image 命令可用于寻址,有多个组合命令。比较实用的用法是用于寻找栈地址对应的代码位置。 下面我写了一段代码
这段代码有明显的错误,程序运行这段代码后会抛出下面的异常。现在,我们怀疑出错的地址是:0x000000010d3e9864
可以看到出错的位置是
RootViewController.m
的第23行(其实0x000000010dd5bb4
也能看出问题),但有时候这会更直观。
不错吧 很有吸引力吧 。◕‿◕。
抛砖引玉:更多命令可以参考 这个网站
另外,facebook开源了他们扩展的LLDB命令库,有兴趣的朋友也可以安装看看。
简称和别名
这些都可以参考这个网站-
常见问题
上面我们简单的学习了如何使用LLDB命令。但有时我们在使用这些LLDB命令的时候,依然可能会遇到一些问题。
比如下面这个命令
-
找不到方法
常见于输出frame的时候。比如你可能会得到以下的错误信息:
这似乎是lldb的一个bug,无法通过点属性访问的方法打印framework里面的对象
总结
通过上面一些简单的讲解,相信朋友们已经知道如何使用LLDB命令来提高自己的效率了。Enjoy it!
转载自:这里