6

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

簡単なテストアプリを作成しました。

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 ++ファイルからコードにステップインし始めます:'list'。最終的にforステートメント内のコードに到達するまで、15回ほどステップオーバーする必要があります。

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

ここに、異なる結果を伴ういくつかの異なるシナリオがあります。

  1. コンパイラとしてLLVMGCC4.2を使用します→問題なく動作します。
  2. Apple LLVMコンパイラ4.0を使用し、C++標準ライブラリにlibstdc++(GNU C ++標準ライブラリ)を設定します→問題なく動作します。
  3. AppleLLVMコンパイラ4.0およびC++標準ライブラリ用のlibc++(C++11をサポートするLLVMC++標準ライブラリ)の設定→問題が発生します。

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

何が起こっているのか、そしてそれに対する修正があるかどうか誰かが知っていますか?

4

1 に答える 1

2

これは、libc++ と対話する lldb / llvm の問題です。これを有効にしてからずっと見てきましたが、libc++ / lldb 開発者だけがそれが何であるかを知ることができると思います。

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

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

...そして、「n」を使用してメインの終わりまでステップスルーしようとすると、次のリストのソースにジャンプします。

* 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      }

私は同意します、これは開発/デバッグ時間を本当に遅くします、そしてそれはlldb開発者に報告されるべきです

于 2012-09-25T18:17:48.677 に答える