LLDB主要命令
1.打印相关的命令有:p、po。
p 和 po 的区别在于使用 po 只会输出对应的值,而 p 则会返回值的类型以及命令结果的引用名。
对比结果:po:输出值 p:值类型+引用名+内存地址+输出值 p还有其他功能
- 1.p:默认打印十进制
- 2.p/x:转16进制
- 3.p/o:转8进制
- 4.p/t:转二进制
- 5.p/d:字符转十进制数字
- 6.p/c:十进制数字转字符
2.expression 修改参数值
3.call方法调用
断点调试某个方法,输出此方法的返回值
4.x打印
x 对象表示以16进制打印对象内存地址(x表示16进制) 因为iOS是小端模式(数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中——反过来存放数据)所以要倒着读数据
x/4gx 对象表示输出4个16进制的8字节地址空间(x表示16进制,4表示4个,g表示8字节为单位,等同于x/4xg 对象)
消 通过x/4xg或x/4gx打印内存地址,地址信息包含存储的属性
5.image指令
image命令主要用于寻址
- image list:命令可以查看项目中使用了哪些库
- image lookup --address+地址:该命令用来查找可执行文件或共享库的原始地址
当程序崩溃时,可以用这条命令来查看崩溃的具体位置
6.查看线程和帧状态
- thread list:列出当前所有线程
上图的*表示当前线程,也就是说thread #1是当前线程
- thread backtrace:打印堆栈信息,简写bt
打印的信息要比左边红框的Debug Navigator更为详细,如果打印的堆栈过多,可以加一个值限制。例如:bt 5。
- bt all:打印所有线程的堆栈信息
bt跟bt all打印的结果一样的原因是例子的项目很简单导致的
- thread return:跳出当前方法的执行,主要用于控制程序流程。thread return后有一个可选参数,在执行过程中会把该参数加载到寄存器,然后立即执行返回命令,跳出当前栈帧。
- frame variable:查看当前帧的变量,默认输出当前帧所有参数和所有局部变量
7.查看寄存器地址
register read:查看寄存器地址信息
register read/x:查看具体寄存器地址
8.methods命令可以打印当前对象的属性和方法
最后
最后附LLDB命令lldb命令