我一直在尝试调试问题,并一直使用lldb
来查看存储在寄存器中的值以提供帮助。
我有一个简单的问题:
(lldb) register read
General Purpose Registers:
rbx = 0x0000618000a4fc60
rbp = 0x00007fff5fbfc690
rsp = 0x00007fff5fbfc670
r12 = 0x0000000000000000
r13 = 0x0000000101a53f00
r14 = 0x00006000000c04d0
r15 = 0x00007fff8468e0c0 libobjc.A.dylib`objc_msgSend
rip = 0x00007fff81a8faa1 Foundation`-[NSNotificationCenter postNotificationName:object:userInfo:] + 66
13 registers were unavailable.
(lldb) po $r13
<NSClipView: 0x101a53f00>
(lldb) po $rbx
<NSClipView: 0x101a53f00>
为什么即使$r13
和$rbx
的地址完全不同,当我po
时,我最终会得到同一个对象?也就是说,$rbx
处存储的地址只会打印$r13
我在想$rbx
处的地址是指针的地址(因为它以0x00006xxxxx开头?),一旦解除引用,就指向位于$r13
地址的对象
po
只是聪明,并且识别地址是指针地址的时候,只是自动取消引用指针?
我还注意到我看到有3种主要类型的地址。
- 0x00006xxxxxxx
- 0x00007fffxxxx
- 0x000000xxxxxx
我知道是什么 - 就像我注意到0x00006xxxxxxx地址似乎是我应用程序对象的指针?
但我真的不确定