LLDB使用详解以及断点调试教程
LLDB是一款Xcode自带的断点调试器,绑定在Xcode底部控制台中,iOS开发的同学平时断点调试肯定对下图不会陌生
调试命令
在这里我们会经常使用po
, bt
这样的命令来协助调试,今天我们来详细讲述一下LLDB的各种命令
help
help是最简单的命令,它会列出所有的命令以及对应的描述.如果你忘记了某个命令是做什么的,你可以使用help <command>
来查看具体的细节,例如help print
或者help expression
.
顾名思义,该命令用于打印值
LLDB会做前缀匹配,你可以直接使用p
代替print
你可能还注意到了$0
,尝试输出p $0 + 10
expression
如果在调试过程中想改变一个值,这时候就需要用到expression
命令.同理,你也可以使用e
代替expression
其实你在lldb中输入help print
会发现,
和expression
不同的是,print
命令不需要参数. -- 是用来表示标识的结束和输入的开始.
打印对象
细心的朋友已经发现上面的str
打印略微复杂点,实际上我们尝试打印结构更加复杂的对象的时候,结果可能会更糟
熟悉Objective-C的朋友肯定知道我们想要打印的其实是对象的description
方法的结果,也就是我们常用的po
(print object的缩写)命令,本质上其实是expression -o
命令
打印变量
你还可以使用p/c
或者p/s
打印以'\0'
结尾的字符串
声明变量
断点调试
第一个按钮是continue
,继续执行,直到下一个断点,在LLDB中,可以使用process continue
达到相同效果 第二个按钮是step over
,执行下一步,如果这行代码是函数调用,不会跳进函数内部,直接执行这个函数, 可以使用thread step-over
和next
或者n
命令 如果你想要跳进一个函数来调试,可以使用第三个按钮,step in
,或者在LLDB中使用thread step in
, step
或者s
命令 第四个按钮是step out
,如果你跳进了一个函数,想要跳过它,step out
可以胜任,该命令会续执行到下一个返回语句
thread return
调试时,还有一个很棒的函数可以用来控制程序流程:thread return
。它有一个可选参数,在执行时它会把可选参数加载进返回寄存器里,然后立刻执行返回命令,跳出当前栈帧。这意味这函数剩余的部分不会被执行。这会给 ARC 的引用计数造成一些问题,或者会使函数内的清理部分失效。但是在函数的开头执行这个命令,是个非常好的隔离这个函数,伪造返回值的方式
断点
Xcode 提供了一系列工具来创建和管理断点,左侧列表中有一个断点样子的按钮用来查看和管理所有断点
当然你也可以在LLDB使用breakpoint list
或者br l
命令来查看所有断点列表.单击断点图标可以进行开启或者关闭断点,在LLDB中使用可以使用breakpoint enable <breakpointID>
和breakpoint disable <breakpointID>
命令来进行该操作
我们可以点击代码编辑页面上的行号进行断点创建,也可以使用breakpoint set
命令创建breakpoint set -f <filename> -l <line number>
,该命令也可以直接使用缩写b
,同时也可以直接使用b <function name>
创建断点而不用指定哪一行
如果想创建符号断点,可以在下图位置选择第三个Symbolic Breakpoint
这时候会出现下图的弹出框(该弹出框也可以通过右击Xcode断点弹出)你可以在Symbol
中添加函数funct
,这样每次执行到funct
函数都会进入断点.或者你也可以加入[NSArray objectAtIndex:] 这样的符号断点.这样每次调用这个函数的时候,程序都会停止,不管是你调用还是苹果调用.
你也可以在编辑断点中添加Condition,操作如下图:
上面的例子中,你或许想知道每一次到达断点的时候 i 的值。我们可以使用 p i
作为断点行为.这样每次到达断点的时候,都会自动运行这个命令. 你也可以添加多个行为,可以是调试器命令,shell 命令,也可以是更直接的打印
Automatically continue after evaluation actions勾上之后执行Action之后继续运行程序
在iOS APP中调试
点击Xcode上的暂停按钮或者在LLDB中执行process interrupt
命令. 执行po [[[UIApplication sharedApplication] keyWindow] recursiveDescription]
命令
更新UI
// 获取imageView
e id $imageView = (id)0x7fc40bf1a200
// 改变颜色
e (void)[$imageView setBackgroundColor:[UIColor blueColor]]
复制代码
点击继续运行程序,便能看到变化.因为改变的内容必须被发送到渲染服务中,然后显示才会被更新. 渲染服务实际上是一个另外的进程 (被称作 backboardd)。这就是说即使我们正在调试的内容所在的进程被打断了,backboardd 也还是继续运行着的.
这意味着你可以运行下面的命令,而不用继续运行程序
e (void)[CATransaction flush]
复制代码
同理你也可以实现push另一个VC这样的操作. 若有错误,请不吝赐教.
参考资料:与调试器共舞 - LLDB 的华尔兹
关联推荐:LLDB调试增强插件Chisel安装与使用教程
LLDB使用详解以及断点调试教程相关推荐
- MySQL安装教程包含所有平台(图解),MySQL下载步骤详解(带安装教程)
现在作为服务器的操作系统一般有两种,分别是 Windows Server 和 Linux,这里我们分别介绍在 Windows 下和 Linux 下安装 MySQL 的具体操作步骤. MySQL安装教程 ...
- mhdd应用详解-入门篇(图文教程)
mhdd应用详解-入门篇(图文教程) 来源:wxiu.com 作者:fox 时间:2009-03-13 点击: 54 对于专业的 电脑维修人员来说, MHDD是必备的硬盘工具,但是技术人员一般只拿他 ...
- 详解CSDN-markdown编辑器使用教程(首次使用CSDN-markdown)
详解CSDN-markdown编辑器使用教程(首次使用CSDN-markdown) 原创:丶无殇 时间:2019-9-19 *仅基于原文教程加以注释* *注释以代码片方式(红字)* 字体颜色和大 ...
- 【JAVA】Eclipse断点调试教程
Eclipse断点调试教程 断点: breakpoint, 标记程序在这里暂停 断点调试的作用: 可以在程序运行中查看程序的执行流程 调试程序, 如查看变量的值 如何加断点: 在行号左边双击 创建/取 ...
- mysql5 workbench教程_详解MySQL Workbench使用教程
MySQL Workbench 是一款专为 MySQL 设计的集成化桌面软件,也是下一代的可视化数据库设计.管理的工具,它同时有开源和商业化两个版本.该软件支持 Windows 和 Linux 系统, ...
- 32位系统是指地址_不起眼却很重要丨32位操作系统与64位操作系统详解(含查询教程)...
大家好,我是小诸葛,一个喜欢捣鼓电脑的小机灵鬼儿,如果关注电脑 手机信息,可以关注小诸葛! 小诸葛 在下载软件的时候,可能会遇到需要选择32位或64位操作系统的选项,对小白来说,32跟64是什么都不知 ...
- 【数据结构】顺序表实现超详解(保姆级教程)
[数据结构] 目录 前言 顺序表 接口实现 各项功能 接口详解 顺序表初始化 顺序表释放 顺序表展示 顺序表容量检查 顺序表数据尾插 顺序表数据头插 顺序表数据前删 顺序表数据尾删 顺序表数据查找 ...
- jenkins流水线(jenkinsfile)详解,保姆式教程
jenkins流水线(jenkinsfile)详解 在学习本篇文章的时候,可以去看看jenkins官网的文档,jenkins官网支持中文,观看十分便捷 此教程使用的是gitee+docker+jenk ...
- 计算机架构64位查看,32位操作系统与64位操作系统详解(含查询教程)
小诸葛 在下载软件的时候,可能会遇到需要选择32位或64位操作系统的选项,对小白来说,32跟64是什么都不知道,于是就会瞎选一通,运气好的,电脑本身是64位操作系统的,选完下载后没问题,但如果是32位 ...
- Eclipse debug 断点调试教程
一.设置断点 在代码里需要调试的地方,鼠标双击代码行号的左边,再次双击即可取消断点. 二.启动服务开始调试 方法一,例如上图的代码中,右键Debug As–>Java Application开始 ...
最新文章
- C++操作windows注册列表
- SQL语言之事务处理语言(Oracle)
- C#中DateTime的缺陷与代替品DateTimeOffset
- Chrome浏览器调试踩坑
- codeM 2018 资格赛
- 华为云大数据存储的冗余方式是三副本_揭秘!10+位DBA大神测评华为云DDS增强版实感...
- PyQt 5信号与槽的几种高级玩法
- python主流测试框架的简介
- input换行输入_小白也能学的Python基础语法-变量与输入和输出
- Openfire+Spark+Spark Web安装配置(一)
- windows端口被占用及广告弹窗处理
- hls解密key获取失败_请求帮助。M3U8里的加密key无法下载。
- Mixly米思齐——超声波测距控制LED灯
- 研究生如何参加以及准备学术会议详细攻略-9000字
- bzoj 3437: 小P的牧场
- 关于地理数据收集与处理的基本工具推荐(2)---10m精度的全球土地覆盖数据下载
- linux开机启动任务和定时执行任务
- AI歌手——超简单一键运用ACE Studio来训练模拟真人唱歌
- 2020数学复习全书习题全解【数学三】
- 双字节数据 先低后高_马云回应双11数据造假;字节上市要再等一等;阿里香港IPO首日获40亿保证金认购;Siri未来或能解读情绪 | Tech周报...