Xcode LLDB Debug 教程(一)

初识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 的信息:

Xcode LLDB Debug 教程(一)_第1张图片

什么?在什么地方可以输入这个命令?Yeah,前提,我们需要先设置一个断点。
比如:你可能需要的是 view 下 subview 的数量。由于 subview 的数量是一个 int 类型的值,所以我们使用命令 p

是不是很简单?
细心的朋友可能会发现输出的信息中带有$1、$2的字样。实际上,我们每次查询的结果会保存在一些持续变量中($[0-9]+),这样你可以在后面的查询中直接使用这些值。比如现在我接下来要重新取回$1的值:
Xcode LLDB Debug 教程(一)_第2张图片

po 和 p 的区别 应该是一个可以输出对象 一个只能输出c类型数据,有错拍砖

常用命令

  • expr (expression)
    可以在调试时动态执行指定表达式,并将结果打印出来。常用于在调试过程中修改变量的值。运行至断点时 输入expr i = 8

    Xcode LLDB Debug 教程(一)_第3张图片

  • bt
    显示当前线程的堆栈 . bt all显示线程所有堆栈

  • image
    image 命令可用于寻址,有多个组合命令。比较实用的用法是用于寻找栈地址对应的代码位置。 下面我写了一段代码


    Xcode LLDB Debug 教程(一)_第4张图片

    这段代码有明显的错误,程序运行这段代码后会抛出下面的异常。现在,我们怀疑出错的地址是:0x000000010d3e9864

    可以看到出错的位置是RootViewController.m的第23行(其实0x000000010dd5bb4 也能看出问题),但有时候这会更直观。

不错吧 很有吸引力吧 。◕‿◕。

抛砖引玉:更多命令可以参考 这个网站
另外,facebook开源了他们扩展的LLDB命令库,有兴趣的朋友也可以安装看看。

  • 简称和别名
    这些都可以参考这个网站

  • 常见问题
    上面我们简单的学习了如何使用LLDB命令。但有时我们在使用这些LLDB命令的时候,依然可能会遇到一些问题。
    比如下面这个命令


  • 找不到方法
    常见于输出frame的时候。比如你可能会得到以下的错误信息:


    Xcode LLDB Debug 教程(一)_第5张图片

    这似乎是lldb的一个bug,无法通过点属性访问的方法打印framework里面的对象

总结

通过上面一些简单的讲解,相信朋友们已经知道如何使用LLDB命令来提高自己的效率了。Enjoy it!

转载自:这里

你可能感兴趣的:(Xcode LLDB Debug 教程(一))