LLDB调试的实际应用

一、常用命令

1. 打印(print)

p指令可打印其对象类型、内存地址以及该对象的值等具体信息,

po指令则是打印其调用description方法得到的值。

Xcode10.2中增加v/vo,因为它绕过了表达式评估程序(expression evaluator),所以它要比p/po更高效,更推荐使用v/vo来代替p/po

v并不像p和po一样,v并没有编译执行的能力,但因此速度也更快。它能访问的是当前栈帧能访问到的数据。如果需要一些更复杂的执行代码或是计算一些值,建议还是使用p和po

2. 赋值(expression)

expr指令赋值指令,动态添加语句操作

3.返回(Thread Return)

thread操作指把可选参数加载进返回寄存器里,然后立刻执行返回命令,跳出当前栈帧

thread return

thread jump --by 1 该命令的1就是跳过1行的意思,我们可以根据具体需求修改此值。需要计算空格

4.通过 Debug 修改 UI (recursiveDescription)

expression -l objc -O -- [`self.view` recursiveDescription]

unsafeBitCast(point, to: type)

//第一个参数为子控件的内存地址,第二个参数为子控件的类型。

expression unsafeBitCast(0x7fa94cb015c0, to: UIButton.self).frame.origin.x = 100

5. 设置别名(alias)

 commend alias 别名 原命令 

command alias poc expression -l objc -O --

poc (void)[CATransaction flush]

6.返回所有的调用栈(bt)

7.通过崩溃栈定位崩溃位置(image)

二、实际应用

所有的命令有两种使用方式:

在 LLDB 中输入:每次都要输入

在断点中配置:只需输入一次

具体实用场景

1、动态添加代码

输入p指令 ,等到提示Enter expressions, then terminate with an empty line to evaluate:的时候增加代码 输入多行用回车换行

p import MJRefresh /// 引入库

2、根据指针找到视图

e let $b = unsafeBitCast(0x7fa33b723cc0, to: UIView.self)

e $b.backgroundColor = .red

你可能感兴趣的:(LLDB调试的实际应用)