lldb - 如何在没有摘要的情况下打印对象?

时间:2013-06-23 18:00:32

标签: xcode xcode4 lldb

问题:我已经为我的对象创建了一个摘要,让我们想一个微不足道的提升:: 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中治愈了吗?

1 个答案:

答案 0 :(得分:1)

您可以使用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(又名p })命令。在这种情况下,我知道的唯一解决方法是暂时禁用格式,例如type category disable libcxx这是这个人希望避免做的事情。