常用lldb指令

 

给函数设置断点

breakpoint set -n test
breakpoint set -n touchesBegan:withEvent:
breakpoint set -n "-[ViewController touchesBegan:withEvent:]"
给指定函数地址加断点
breakpoint set -a 函数地址

breakpoint set -r est (正则,包含est的函数都断点)

breakpoint set -s 动态库 -n 函数名

查看指令的用法
help breakpoint、help breakpoint set
expression --
执行一个表达式
也可简写为e
expression self.view.backgroundColor = [UIColor redColor]
// 刷新界面
(lldb) expression -- (void)[CATransaction flush]
备注,如果是用地址的话一定要强转
po [(UIView *)0x15dd0e080 nextResponder]

查看父类
po [0x1229eb200 superclass]
TBCBaseViewController
查看视图结构
po [self.view recursiveDescription]

expression、expression --和指令print和p、call?的效果一样
expression -O --和指令po的效果一样

thread backtrace 
打印线程的堆栈信息
和指令bt的效果一样

thread return []
让函数直接返回某个值,不会执行断点后面的代码
frame variable []
例如可以写 frame variable a
打印当前栈帧的变量
不带参数就是打印所有

断点调试
thread continue、continue、c 程序继续运行
thread step-over、next、n 单步运行,把子函数当做整体一步运行
thread step-in、step、s 单步运行,遇到子函数会进入子函数
thread step-out、finish 直接执行完当前函数的所有代码,返回到上一个函数
thread step-inst-over、nexti、ni
thread step-inst、stepi、si
si、ni和s、n类似
s、n?是源码级别
si、ni?是汇编指令级别

breakpoint list 列出所有的断点
breakpoint disable 断点编号:禁用断点
breakpoint enable 断点编号:启用断点 
breakpoint delete 断点编号:删除断点


breakpoint command add 断点编号
给断点预先设置需要执行的命令,到触发断点时,就会按顺序执行
breakpoint command list 断点编号
breakpoint command delete 断点编号

内存断点
watchpoint set variable 变量
watchpoint set variable self->age
watchpoint set expression &(self->_age)
同理还有这些
watchpoint list
watchpoint disable 断点编号
watchpoint enable 断点编号 
watchpoint delete 断点编号 
watchpoint command add 断点编号
watchpoint command list 断点编号 
watchpoint command delete 断点编号



image lookup
image lookup -t 类型 查找某个类型的信息(例如NSInteger)
image lookup -a 地址 根据内存地址查找在模块中的位置(开发中程序运行崩溃,可用这个定位在哪一行) 
image lookup -n 符号或者函数名 查找某个符号或者函数位置

image list
image list -o -f 打印出模块的偏移地址、全路径

寄存器相关
dis -s -a 内存地址 查看内存 (disassemble --显示汇编代码 d di dis 等缩写都可以)
读取内存操作:
memory read/数量 _ 格式 _ 字节数 内存地址
或者
x/数量 _ 格式 _ 字节数 内存地址
格式
x :代表16进制
f :代表浮点数
d :代表10进制

字节大小
b :byte 代表1个字节
h :half word 代表2个字节
w :word 代表4个字节
g :giant word 代表8个字节

如:
memory read/1wx 0x7ffee14a5ba8
memory read/1wd 0x7ffee14a5ba8

用gdb查看内存
格式: x /nfu <addr>
说明
x 是 examine 的缩写
n表示要显示的内存单元的个数
f表示显示方式, 可取如下值
x 按十六进制格式显示变量。
d 按十进制格式显示变量。
u 按十进制格式显示无符号整型。
o 按八进制格式显示变量。
b表示单字节,
h表示双字节,
w表示四字节,
g表示八字节


po $x0:打印方法调用者
x/s $x1:打印方法名
po $x2:打印参数(以此类推,x3、x4也可能是参数)
如果是非arm64,寄存器就是r0、r1、r2


小技巧
 敲Enter,会自动执行上次命令
绝大部分指令都可以使用缩写

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值