美文网首页
dailyLearning -- LLDB常用调试命令

dailyLearning -- LLDB常用调试命令

作者: 树根曰 | 来源:发表于2018-03-26 22:33 被阅读0次

LLDB

LLDB是一个命令行调试环境, 内置于Xcode的调试工具, 它与LLVM编译器一起, 带给我们更丰富的流程控制和数据检测的调试功能. 平时用Xcode运行程序, 实际走的都是LLDB. 熟练使用LLDB, 可以让你debug事半功倍.
LLDB对于命令的简称, 是头部匹配方式, 只要不混淆, 你可以随意简称某个命令. 结果为在xcode下验证所得, 可能与其它平台有所误差.
LLDB控制台平时会输出一些log信息. 如果我们想输入命令调试, 必须让程序进入暂停状态. 让程序进入暂停状态的方式主要有2种:

  1. 断点或者watchpoint: 在代码中设置一个断点(watchpoint). 当程序运行到断点位置的时候, 会进入stop状态
  2. 直接暂停, 控制台上方有一个暂停按钮, 上图红框已标出, 点击即可暂停程序.

1. 打印值,修改值,调用方法

1.1 p,po打印值
  • 打印相关的命令有:p,po

    p和po的区别在于使用po只会输出对应的值,而p则会返回值的类型以及命令结果的引用名。 p 和 po命令
  • 对比结果:

PO:输出值
号码:输出值+值类型+引用名+内存地址(xcode中中有内存地址,其它平台不确定)

除此之外, 对还隐藏了一个有意思的功能, 常量的进制转换:
1.2 表达修改参数值

感觉EXP命令是调试过程中最有价值有命令了, 它可以打印值, 修改值.

expression 命令
表达:同样可以输出值+值类型+引用名 , 但其一般用于修改.
1.3 调用方法调用

在断点调用某个方法,并输出此方法的返回值

call 命令
表达:同样为输出值+值类型+引用名

2. 线程

2.1 堆栈打印线程回溯
如果嫌堆栈打印太长,可以加一个值限制,如bt 10,只打印 线程回溯 bt命令
2.2 线程返回跳出当前方法的执行

Debug的时候, 也许会因为各种原因, 我们不想让代码执行某个方法, 或者要直接返回一个想要的值. 这个时候就该线程返回上场了.

有返回值的方法里, 如: numberOfSectionsInTableView: 直接线程返回10, 就可以直接跳过方法执行, 返回10. 跳出 thread return 命令
2.3 流程控制
实际上使用的Xcode自带的可视化工具来控制“继续”,“暂停”,“下一步”,“进入”,“跳出”更简单. 流程控制命令
2.4 跳帧选择N
2.1中打印有10帧,如果我想跳转到第1帧:frame select 1 跳帧选择
2.5 查看帧变量

3. 图像

3.1 图像查找地址查找崩溃位置

当你遇见数组崩溃, 你又没有找到崩溃的位置, 只扔给你一堆报错信息, 这时候图像查询来帮助你

图像查找
寻找自己项目的标识,看到帧3位置,你只需这样查找位置:
项目中FW_MyHomeTableView.m:243
3.2 图像查找名称查找方法来源

此命令可以用来查找方法的来源包括在第三方SDK中的方法, 也能被查到.

例:查找transformOtherModelToSuit:
3.3 image lookup-type查看成员
查看某个类的所有属性和成员变量. 不过貌似框架库中文件不能查看.

4. 断点

4.1 文件名+行号断点集-f xxx -l xxx
我们平时操作的Xcode, 在某一行点下断点, 其实操作的就是这个命令.
4.2 函数名断点
4.2.1 方法名断点断点set -n方法名

提示:这里要说一下, xcode其实也有函数名断点, 不过用断点set -n实现, 比xcode下断点快N倍, 不过xcode下的断点还给提示所有断到的位置

4.2.2 类中方断断点集-n“ - [类名方法名]

注意: - [FW_MyHomeViewController viewDidLoad],外面一定要加双引号,不然会误识别为 - [FW_MyHomeViewController`

4.3 条件断点断点set -c“xxxx”
和xcode中符号断点功能相同,我在FW_HomeCell.m 362行下断点,但又想过滤宽度> 68的状态,操作如下:
4.4 查看断点列表断点列表
4.5 禁用/启用断点断点禁用/启用
4.6 移除断点断点删除
结语:

有了这些命令, 调试起来肯定就得心应手了总结下常用的:

  • 堆栈相关:bt查看堆栈,帧选择跳帧,帧变量查看帧参数,线程返回跳出当前执行,【step / finish / next / continue】进入/跳出/下一步/跳出本断点
  • 断点相关:断点集-f -l -c条件断点,断点集-n方法断点,断点删除断点移除,断点列表断点列表
  • image命令:image lookup -address崩溃定位,image lookup -name方法来源,image lookup-type查看成员
  • LLDB支持简写

Getting Started with LLDB

相关文章

  • dailyLearning -- LLDB常用调试命令

    LLDB LLDB是一个命令行调试环境, 内置于Xcode的调试工具, 它与LLVM编译器一起, 带给我们更丰富的...

  • 各种调试技巧

    断点调试并配合LLDB常用调试命令LLDB命令详见:http://www.jianshu.com/p/d14a25...

  • iOS之LLDB常用调试命令

    iOS之LLDB常用调试命令熟练使用 LLDB,让你调试事半功倍使用facebook开源的Chisel调试Home...

  • LLDB调试命令初探

    LLDB调试命令初探 初识LLDB 你可能从未使用过LLDB,那让我们先来热热身。 在调试器中最常用到的命令是p(...

  • 知识点-LLDB调试命令

    lldb是我们平时在打断点时候,打印面板出现的。 lldb是Xcode自带的调试工具,下面是常用的lldb调试命令...

  • 常用调试命令

    LLDB常用命令 LLDB是LLVM下的调试器 p 输出基本类型 po 输出objc对象 expr 断点调试时,在...

  • LLDB 使用

    LLDB 使用 LLDB(Low Lever Debug)命令结构 其中: (命令)和 (子命令):LLDB调试命...

  • LLDB命令

    lldb是我们平时在打断点时候,打印版出现的,它是Xcode自带的调试工具,下面是常用的lldb调试命令。 1、p...

  • LLDB常用调试命令

    LLDB是个开源的内置于XCode的调试工具,这里来理一常常用法。lldb对于命令的简称,是头部匹配方式,只要不混...

  • LLDB常用调试命令

    p:用于输出基本类型 po:用于输出 Objective-C 对象 bt:打印调用堆栈 call:调用的意思 继续...

网友评论

      本文标题:dailyLearning -- LLDB常用调试命令

      本文链接:https://www.haomeiwen.com/subject/hsfmqftx.html