2012-09-15 9 views
6

C++のリスト反復でデバッグしようとすると問題が発生します。Xcode 4.4のlibC++でのデバッグの問題

私は簡単なテストアプリ作っ:「リスト:私は矢印でマークされた行の午前とき、私はステップオーバー時にデバッグ中

int main(int argc, const char * argv[]) 
{ 
// insert code here... 
std::cout << "Hello, World!\n"; 

std::list<int> list; 
list.push_back(1); 
list.push_back(2); 
--> list.push_back(3); //Line before step over 
    for (std::list<int>::const_iterator i = list.begin(); i != list.end(); i++) 
    { 
     std::cout << *i << std::endl; 
    } 
    return 0; 
} 

を、それはC++ファイルからコード上でのステッピングを開始します' 私は最終的にforステートメント内のコードに到達するまで15回以上ステップオーバーする必要があります。

この問題は、Xcode 4.4でのみ発生します。 Xcode 4.3では、デバッグは完全に機能します。

はここで異なる結果といくつかの異なるシナリオがあります:それはうまく動作→

  1. は、コンパイラとしてLLVM GCC 4.2を使用してください。
  2. Apple LLVMコンパイラ4.0を使用し、C++標準ライブラリ用にlibstdC++(GNU C++標準ライブラリ)を設定する→正常に動作します。
  3. Apple LLVMコンパイラ4.0およびC++標準ライブラリのlibC++(LLVM C++標準ライブラリ(C++ 11サポートあり)を設定)→問題が発生します。

私が取り組んでいるプロジェクトでは、Apple LLVMコンパイラ4.0とlibC++(C++ 11サポートのLLVM C++標準ライブラリ)を使用していますので、シナリオ3でこの問題を解決する必要があります)。

誰かが何が起こっている可能性がありますか、それに対して修正がある場合は知っていますか?

+1

これは役に立ちませんが、私はこの種のことを常にXcodeで実行しています。 gdbの方がlldbよりも普及しているようですが、どちらもうまくいきません。それは非常に長い時間この方法でした。私がバグを報告すると、通常は修正されますが、別のインスタンスが別の場所にポップアップします。なぜXcodeにこれらの問題があるのか​​よくわからないが、他の一般的な開発ツールではそうではない。 – user1118321

答えて

2

lldb/llvmとlibC++とのやりとりに問題があります。私はlibC++/lldb開発者だけがそれが何であるかを知ることができると思っていますが、

これは解決策ではありませんが、llvm 3.1(現在のリリース、Xcode 4.5)のコマンドラインからの問題と思われます。私が行う場合:これは本当に、

* thread #1: tid = 0x1c03, 0x00000001000010a2 test`main [inlined] std::__1::__list_imp<int, std::__1::allocator<int> >::begin() at list:543, stop reason = step over 
    frame #0: 0x00000001000010a2 test`main [inlined] std::__1::__list_imp<int, std::__1::allocator<int> >::begin() at list:543 
    540  { 
    541 #if _LIBCPP_DEBUG_LEVEL >= 2 
    542   return iterator(__end_.__next_, this); 
-> 543 #else 
    544   return iterator(__end_.__next_); 
    545 #endif 
    546  } 

が、私は同意する:

clang++ -g -O0 -stdlib=libc++ -std=c++11 test.cpp -o test 
lldb test 
breakpoint set --file test.cpp --line 8 

...そしてそれはでリストのソースにジャンプし、メインの最後までステップ実行するために「n」を使用するようにしてください開発/デバッグの時間が遅くなります。lldb devs

関連する問題