2013-06-23 15 views
0

問題:我已經創建了我的對象的總結,讓我們想到一個簡單的boost :: intrusive_ptr(我有更復雜的,所以這只是舉例)lldb - 如何打印沒有摘要的對象?

,如果我現在有:

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?

回答

0

您可以使用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這是這個人希望避免做的事情。

+0

這對錶達式沒有幫助。也就是說,如果沒有'測試',但是std :: string只是作爲函數的結果返回。 –

+0

樹頂開源LLDB有一個-R(-raw-output)標誌 –