gpt4 book ai didi

c++ - Xcode 4.4 中 libc++ 的调试问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:44:07 25 4
gpt4 key购买 nike

当我尝试在 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++ 标准库)→ 出现问题。

在我正在处理的项目中,我们使用的是 Apple LLVM 编译器 4.0 和 libc++(支持 C++11 的 LLVM C++ 标准库),因此我需要为场景 3 解决这个问题。

有人知道会发生什么吗?是否有解决办法?

最佳答案

这是 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 结束,它跳转到列表的源代码:

* 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

关于c++ - Xcode 4.4 中 libc++ 的调试问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12439318/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com