1

问题:我为我的对象创建了一个摘要,让我们考虑一个微不足道的 boost::intrusive_ptr (我有更复杂的,所以这只是示例)

现在如果我有:

boost::intrusive_ptr< MyClass >  pobj;

我从控制台输入

p pobj

我会看到 MyClass 的摘要。

但是,如果我想查看它的内部 px 成员——即 pobj.px 怎么办?

我知道两种方法:

  • 将摘要放入一个类别,然后暂时禁用它(不方便)
  • 帧变量 -Y0 和第二个将是理想的,但是如果我想查看表达式的结果该怎么办?这类似于 p MyObj.GetContents.GetSmartPtr()

我已经尝试过类似的东西:

frame variable -Y0 $0

但这不起作用。

我使用 XCode 4.6.3。

有没有办法关闭摘要?可能有人知道这是否在 XCode 5 或最新的 lldb 中得到解决?

4

1 回答 1

2

您可以使用 . 查看原始信息frame variable -R

(lldb) fr v test
(std::__1::string) test = "hi there"

(lldb) fr v -R test
(std::__1::string) test = {
  __r_ = {
    std::__1::__libcpp_compressed_pair_imp<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__rep, std::__1::allocator<char> > = {
      __first_ = {
         = {
[...]

更新:OP澄清他在一个方便变量中的值,例如 std::string foo () { return std::string("hi there"); }

(lldb) p foo()
(std::string) $0 = "hi there"

并且想要在$0没有任何格式的情况下查看 - 并且frame variable无法访问便利变量,因此这需要通过expression(aka p) 命令。在这种情况下,我知道的唯一解决方法是暂时禁用格式,例如type category disable libcxx,此人希望避免这样做。

于 2013-06-23T20:22:07.183 回答