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段。