LLDB指令
print : 打印值
LLDB会作前缀匹配,所有可以用 print prin pri 或 p。但是不能用pr 因为和process指令有歧义
输出OC 对象,用 po,实质是调用了对象的description方法
打印变量,可以给print 指定不同的打印格式
x - 16进制
d - 带符号10进制
u - 无符号10进制
o - 8进制
t - 2进制
a - 查看内存地址指向的数据
c - 输出字符
f - 浮点型
s - 字符串类型
(lldb) p count
(NSInteger) $2 = 60
(lldb) p str
(__NSCFConstantString *) $3 = 0x0000000100078268 @"fame"
(lldb) po str
fame
//16进制
(lldb) p/x count
(NSInteger) $1 = 0x000000000000003c
//8进制
(lldb) p/o count
(NSInteger) $2 = 074
//2进制
(lldb) p/t count
(NSInteger) $3 = 0b0000000000000000000000000000000000000000000000000000000000111100
//输出字符
(lldb) p/c [str characterAtIndex:2]
(unichar) $5 = m\0 U+006d u'm'
//输出字符串
(lldb) p/s str
(__NSCFConstantString *) $6 = @"fame"
(lldb) p/a str
(__NSCFConstantString *) $15 = 0x00000001000d4268 @"fame" @"fame"
//输出 0x00000001000d4268 地址指向的数据
(lldb) p/a 0x00000001000d4268
(long) $16 = 0x00000001000d4268 @"fame"
//浮点型
(lldb) p/f count
(NSInteger) $17 = 2.9643938750474793E-322
expression : 修改、声明变量
简写: e
expression 既可以修改变量的值,又可以声明变量,声明的变量必须以 $ 开头
//修改变量的值
(lldb) e count = 100
(NSInteger) $24 = 100
(lldb) p count
(NSInteger) $25 = 100
//声明变量
(lldb) e int $a = -1
(lldb) p/d $a
(int) $a = -1
(lldb) p/d $a*19
(int) $20 = -19
(lldb) e NSArray *$array = @[@"aaa", @"bbb", @"ccc"]
(lldb) p $array[0]
(NSTaggedPointerString *) $21 = 0xa000000006161613 @"aaa"
(lldb) p/c [$array objectAtIndex:1]
(NSTaggedPointerString *) $22 = #&&\x06\0\0\0\xa0 @"bbb"
(lldb) p/c [[$array objectAtIndex:1] characterAtIndex:1]
error: no known method '-characterAtIndex:'; cast the message send to the method's return type
//LLDB无法返回值的类型,需要指定类型
(lldb) p/c (char)[[$array objectAtIndex:1] characterAtIndex:1]
(char) $23 = 'b'
调试流程控制
继续执行程序 process continue ,它的别名为 continue,缩写为 c。
执行一行代码 thread step-over,next,或者 n 命令。
跳进函数 thread step-in, step ,缩写为 s。
跳出函数 thread step-out ,缩写为 finish.
Thread Return 调试时,还有一个很棒的函数可以用来控制程序流程:thread return 。它有一个可选参数,在执行时它会把可选参数加载进返回寄存器里,然后立刻执行返回命令,跳出当前栈帧。这意味这函数剩余的部分不会被执行。这会给 ARC 的引用计数造成一些问题,或者会使函数内的清理部分失效。但是在函数的开头执行这个命令,是个非常好的隔离这个函数,伪造返回值的方式 。
断点管理
查看所有断点:breakpoint list ,简写 br li
开启断点:breakpoint enable <断点编号>
关闭断点:breakpoint disable <断点编号>
原文地址:https://objccn.io/issue-19-2/