lldb命令調(diào)試
首先我們創(chuàng)建一個(gè)簡(jiǎn)單工程來(lái)調(diào)試這些命令。打斷點(diǎn),下方就可以進(jìn)行l(wèi)ldb調(diào)試。
p & po
指令p與po對(duì)比
po
:輸出值 或者 對(duì)象的地址
p
:輸出值+值類型+引用名+內(nèi)存地址
除此之外,p
還隱藏了一個(gè)有意思的功能,常量的進(jìn)制轉(zhuǎn)換:
//默認(rèn)十進(jìn)制打印
(lldb) p 100
(int) $4 = 100
//16進(jìn)制打印
(lldb) p/x 100
(int) $5 = 0x00000064
//8進(jìn)制打印
(lldb) p/o 100
(int) $6 = 0144
//二進(jìn)制打印
(lldb) p/t 100
(int) $7 = 0b00000000000000000000000001100100
//字符轉(zhuǎn)十進(jìn)制數(shù)字
(lldb) p/d 'A'
(char) $8 = 65
//數(shù)字轉(zhuǎn)十進(jìn)制字符
(lldb) p/c 66
(int) $9 = B\0\0\0
其中,float
和 double
是經(jīng)過(guò)特殊處理的,經(jīng)過(guò)一些轉(zhuǎn)換,結(jié)果如下:
(lldb) p/x (float)100.0
(float) $18 = 0x42c80000
(lldb) p/x (double)100.0
(double) $19 = 0x4059000000000000
p/f 0x4024000000000000 打印為 10 ,此處用法為以浮點(diǎn)數(shù)形式輸出,在調(diào)試代碼時(shí)輸出被處理過(guò)的 浮點(diǎn)型數(shù)據(jù) (float Double)
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
內(nèi)存讀取并打印的作用。
(lldb) x/4gx person
0x2822bdda0: 0x000001a102b117cd 0x0000001200006261
0x2822bddb0: 0x0000000102b0c028 0x0000000102b0c048
(lldb) x/4gw person
0x2822bdda0: 0x02b117cd 0x000001a1 0x00006261 0x00000012
(lldb)
4
: 打印4
段。
g
: 格式化輸出(iOS內(nèi)存為小端模式,上面的x person
打印結(jié)果可以看出,與x/4gx
打印結(jié)果 每一段剛好相反,x/4gx
有規(guī)律打印)。
x
: 每一段以16
進(jìn)制打印。
w
:以16
進(jìn)制打印,但只輸出8
位。
同理:x/8gx
打印8
段,x/2gx
打印2
段。