LLDB expression获取的地址为什么是派生类对象的首地址,而不是偏移后的基类地址?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
LLDB expression在展示地址时,实际上展示的是表达式求值后得到的指针值。对于虚函数继承的基类指针,LLDB内部会通过其summary format机制来格式化展示结果。在这个过程中,LLDB会根据当前的内存地址和C++运行时的动态类型信息,来向用户展示一个“有意义”的地址,这个地址可能是派生类对象的首地址,因为通过这个地址和虚基类表(如果有的话),可以间接访问到基类部分。然而,这并不意味着基类指针没有发生偏移;实际上,在内部运行时,基类指针已经正确地偏移到了基类对象在派生类对象中的实际位置。