三年前总结过一些常用的LLDB命令LLDB tips总结,当时刚转来简书,写的比较糙,也没有用markdown来格式化,今天正好有时间,也算回顾一下吧。
- expression
expression
指令可用来修改变量的值或者执行某个方法
可以简写成expr
或者e
和expression
相似的命令是call
, call
也可以用来执行某个语句
call self.view.backgroundColor = [UIColor redColor];
- thread backtrace
thread backtrace
可以用来打印线程的堆栈调用信息,简写是bt
- image lookup -a 地址
当程序crash的时候,可以使用这个命令查看堆栈地址对应的方法名等信息,相当于符号化。
image lookup -a
- watchpoint set variable 实例变量
该命令的作用和KVO的效果类似,使用该命令给实例变量添加一个断点,当实例变量的值被修改的时候就会触发断点,这在代码比较复杂的情况下调试变量非常的方便:
watchpoint set variable注意,这里触发断点的时候,代码会先定位到实例变量定义的位置:
pic
点击控制台工具栏上试图层级按钮旁边的 向上的⬆️按钮,就会跳转到真正修改实例变量的位置了:
pic2
- 给断点添加执行动作
这个功能有时候还是比较有用的,就是在断点处添加一些执行动作,断点存在的时候,程序执行到这里就会自动执行断点里面的动作,移除断点后一切又会变回原来的逻辑。比如,下面,我们设定当程序执行到断点出的时候,执行isFirstIn=YES
这里记得勾选
Automaticlly continue after evaluating actions
选项,这样下次程序走到断点这里就不会暂停,而是直接执行了,执行效果如下:pic2
当我们测试结束,直接将断点移除即可,这并不会影响正常的逻辑:
pic3
这里的好处就是,我们不需要修改代码就能控制逻辑,这比临时修改代码来做测试安全多了,毕竟手动修改的代码你可能会在上线的时候忘记改回去了。
- thread return 返回值
当我们不想继续执行后面的逻辑的时候,可以使用该命令直接退出方法执行
pic1 pic2
print
可以用来打印变量,比如我们常用的po
命令就是print object
的缩写。
另外,如果我们还可以使用下面的命令打印不同格式的变量值:
`p/x`: 打印十六进制
`p/t`: 打印二进制
`p/c`: 打印字符
网友评论