开发者社区 问答 正文

LLDB expression获取的地址为什么是派生类对象的首地址,而不是偏移后的基类地址?

LLDB expression获取的地址为什么是派生类对象的首地址,而不是偏移后的基类地址?

展开
收起
不吃核桃 2024-08-06 11:35:42 27 分享 版权
1 条回答
写回答
取消 提交回答
  • LLDB expression在展示地址时,实际上展示的是表达式求值后得到的指针值。对于虚函数继承的基类指针,LLDB内部会通过其summary format机制来格式化展示结果。在这个过程中,LLDB会根据当前的内存地址和C++运行时的动态类型信息,来向用户展示一个“有意义”的地址,这个地址可能是派生类对象的首地址,因为通过这个地址和虚基类表(如果有的话),可以间接访问到基类部分。然而,这并不意味着基类指针没有发生偏移;实际上,在内部运行时,基类指针已经正确地偏移到了基类对象在派生类对象中的实际位置。

    2024-08-06 14:58:35
    赞同 展开评论
问答地址: