LLDB 简单用法

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/

转载于:https://my.oschina.net/mexiaobai1315/blog/883630

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值