2013-06-23 21 views
0

我有這個向量中使用unique_ptr的C++ 11代碼。xld上的lldb與獨立的lldb

#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中進行調試時,有兩個錯誤。

enter image description here

第一個是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 

什麼可能是錯的?

回答

0

我重新安裝了最新版本的Lion:Xcode 4.6的Xcode,問題就沒有了。

0

您的分段故障似乎是它可以由兩兩件事之一引起:

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

爲了分不清哪個是哪個,崩潰日誌將是必要的。

如果你可以從~/Library/Logs/DiagnosticReports檢索它並將它添加到這個問題(也是在http://bugreport.apple.com提交一個bug與蘋果),這將是一個很好的起點

此外,它看起來像你使用的是預5 Xcode。那是對的嗎?你有權訪問Xcode 5開發者預覽版來測試這個重現嗎? LLDB在4.x和5之間有了很大的提升,所以你可能會有更好的運氣。