在Xcode 4.4中使用libc ++调试问题

时间:2012-09-15 16:55:37

标签: c++ debugging xcode4.4 lldb libc++

当我尝试在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'。 我必须跳过15次,直到它最终到达for语句中的代码。

此问题仅发生在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 ++(支持C ++ 11的LLVM C ++标准库)→问题发生。
  4. 在我正在开发的项目中,我们正在使用Apple LLVM编译器4.0和libc ++(支持C ++ 11的LLVM C ++标准库),所以我需要为场景3解决这个问题。

    有人知道会发生什么,以及是否有修复方法?

1 个答案:

答案 0 :(得分:2)

lldb / llvm与libc ++交互是一个问题,自从我们启用它以来,我已经看过它了,尽管我认为只有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'直到main的结尾,它跳转到list的源代码:

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