我现在在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中类实例的指针检查类成员?
答案 0 :(得分:1)
而不是使用
fr v msg->m_msgSentTime
请改用以下内容:
p msg->msgSentTime
但是,我还没有找到这两个命令之间的区别(以防万一有人可能会看到同样的问题,我回答了我自己的问题)。如果任何LLDB专家知道差异,欢迎您添加更多。
答案 1 :(得分:1)
frame variable
(fr v
)内置了非常简单的C语言语法知识。它适用于堆栈帧本地的变量(或者如果使用target variable
则为全局变量) - 它知道如何取消引用指针(*
,->
)并知道如何查看结构的子元素(.
),我认为它可以进行数组索引([1]
)。但那是关于它的。你绝对不能像fr v msg.get()->m_msgSentTime
(或等同的fr v msg->m_msgSentTime
那样进行函数调用。您不能使用frame variable
在变量表达式中放置任何类型转换。
您可能已经能够使用fr v msg.__ptr_->m_msgSentTime
或其他类似的东西来执行此操作,具体取决于共享指针对象的实现。