iOS开发技能之lldb常用命令
2020-09-12 本文已影响0人
Lcr111
lldb命令调试
首先我们创建一个简单工程来调试这些命令。打断点,下方就可以进行lldb调试。
p & po
指令p与po对比
po
:输出值 或者 对象的地址
p
:输出值+值类型+引用名+内存地址
除此之外,p
还隐藏了一个有意思的功能,常量的进制转换:
//默认十进制打印
(lldb) p 100
(int) $4 = 100
//16进制打印
(lldb) p/x 100
(int) $5 = 0x00000064
//8进制打印
(lldb) p/o 100
(int) $6 = 0144
//二进制打印
(lldb) p/t 100
(int) $7 = 0b00000000000000000000000001100100
//字符转十进制数字
(lldb) p/d 'A'
(char) $8 = 65
//数字转十进制字符
(lldb) p/c 66
(int) $9 = B\0\0\0
其中,float
和 double
是经过特殊处理的,经过一些转换,结果如下:
(lldb) p/x (float)100.0
(float) $18 = 0x42c80000
(lldb) p/x (double)100.0
(double) $19 = 0x4059000000000000
x
(lldb) x person
0x2822bdda0: cd 17 b1 02 a1 01 00 00 61 62 00 00 12 00 00 00 ........ab......
0x2822bddb0: 28 c0 b0 02 01 00 00 00 48 c0 b0 02 01 00 00 00 (.......H.......
(lldb) memory read person
0x2822bdda0: cd 17 b1 02 a1 01 00 00 61 62 00 00 12 00 00 00 ........ab......
0x2822bddb0: 28 c0 b0 02 01 00 00 00 48 c0 b0 02 01 00 00 00 (.......H.......
(lldb)
如上所示,x
就是 memory read
内存读取并打印的作用。
(lldb) x/4gx person
0x2822bdda0: 0x000001a102b117cd 0x0000001200006261
0x2822bddb0: 0x0000000102b0c028 0x0000000102b0c048
(lldb) x/4gw person
0x2822bdda0: 0x02b117cd 0x000001a1 0x00006261 0x00000012
(lldb)
4
: 打印4
段。
g
: 格式化输出(iOS内存为小端模式,上面的x person
打印结果可以看出,与x/4gx
打印结果 每一段刚好相反,x/4gx
有规律打印)。
x
: 每一段以16
进制打印。
w
:以16
进制打印,但只输出8
位。
同理:x/8gx
打印8
段,x/2gx
打印2
段。