如何通过指向类实例的指针获取LLDB中的类成员

时间:2014-11-08 00:53:36

标签: c++ lldb

我现在在MAC中使用LLDB(相当新的用户)。我有以下示例代码:

 MessageCacheItem::pointer msg = getValue(objId);
 bool outdated = (NULL != msg.get()) && (msgSentTime > msg->m_msgSentTime);
 return outdated;

MessageCacheItem是一个拥有私有成员m_msgSentTime的类。在LLDB内部,我使用了以下命令:

fr v msg->m_msgSentTime

它给了我以下错误:

  

错误:“msg”不是指针而且 - >用于尝试访问“m_msgSentTime”。你是说“badge.m_msgSentTime”吗?

虽然msg是类实例的shared_pointer。

我的问题是:如何使用指向LLDB中类实例的指针检查类成员?

2 个答案:

答案 0 :(得分:1)

而不是使用

fr v msg->m_msgSentTime

请改用以下内容:

p msg->msgSentTime

但是,我还没有找到这两个命令之间的区别(以防万一有人可能会看到同样的问题,我回答了我自己的问题)。如果任何LLDB专家知道差异,欢迎您添加更多。

答案 1 :(得分:1)

frame variablefr v)内置了非常简单的C语言语法知识。它适用于堆栈帧本地的变量(或者如果使用target variable则为全局变量) - 它知道如何取消引用指针(*->)并知道如何查看结构的子元素(.),我认为它可以进行数组索引([1])。但那是关于它的。你绝对不能像fr v msg.get()->m_msgSentTime(或等同的fr v msg->m_msgSentTime那样进行函数调用。您不能使用frame variable在变量表达式中放置任何类型转换。

您可能已经能够使用fr v msg.__ptr_->m_msgSentTime或其他类似的东西来执行此操作,具体取决于共享指针对象的实现。