簡體   English   中英

xcode上的lldb與獨立版本上的lldb

[英]lldb on xcode vs lldb on standalone

我有這個在向量中使用unique_ptr C ++ 11代碼。

#include <vector>
#include <iostream>
#include <memory>

using namespace std;

class A
{
    int x;
public:
    A() {}
    ~A() {}
    A(A& a) {}
    A(int x) {this->x = x;}
    int get() {return x;}
};

int main()
{
    vector<unique_ptr<A>> v;
    auto a = new A(10);
    unique_ptr<A> pa(a);
    v.push_back(move(pa)); // move(pa);

    auto a2 = new A(20);
    unique_ptr<A> pb(a2);
    v.push_back(move(pb)); // move(pa);

    for (auto& i: v)
    {
        cout << i->get();
    }
}

我可以使用Xcode調試並檢查vector>中的值。 但是,當我用clang編譯相同的代碼並在lldb中調試時,出現兩個錯誤。

在此處輸入圖片說明

第一個是lldb跟蹤STL源代碼。

* thread #1: tid = 0x1f03, 0x0000000100001744 a.out`__gnu_cxx::__normal_iterator<std::unique_ptr<A, std::default_delete<A> >*, std::vector<std::unique_ptr<A, std::default_delete<A> >, std::allocator<std::unique_ptr<A, std::default_delete<A> > > > >::operator*() const at stl_iterator.h:740, stop reason = step over
    frame #0: 0x0000000100001744 a.out`__gnu_cxx::__normal_iterator<std::unique_ptr<A, std::default_delete<A> >*, std::vector<std::unique_ptr<A, std::default_delete<A> >, std::allocator<std::unique_ptr<A, std::default_delete<A> > > > >::operator*() const at stl_iterator.h:740
   737  
   738        // Forward iterator requirements
   739        reference
-> 740        operator*() const
   741        { return *_M_current; }
   742  
   743        pointer
(lldb) n
Process 41243 stopped

第二個錯誤是我嘗試查看向量內容時遇到分段錯誤。

(lldb) p v
Segmentation fault: 11

我使用此命令進行編譯。

clang++ -std=c++11 -stdlib=libc++ -g testit.cpp -o a

可能是什么問題?

您的細分錯誤似乎可能是由以下兩種原因之一引起的:

  • LLDB表達式解析器
  • LLDB數據格式化程序

為了確定是哪個,將需要崩潰日志。

如果您可以從~/Library/Logs/DiagnosticReports檢索到該錯誤並將其附加到此問題(並通過http://bugreport.apple.com向Apple提交錯誤),那將是一個很好的起點

另外,您似乎正在使用5之前的Xcode。 那是對的嗎? 您是否有權訪問Xcode 5開發人員預覽版以測試是否可以復制? LLDB在4.x和5之間得到了很大的改進,因此您可能會遇到更好的運氣。

我用Lion的最新版本重新安裝了Xcode:Xcode 4.6,問題解決了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM