10

我在 Xcode 4.5 中使用(Apple)LLVM 4.1(但我在早期的测试版中看到了同样的东西)。我有它针对 C++11 并且正在使用 libc++(新的,启用 C++11,LLVM 版本的 std 库)。

在调试版本中,如果我尝试跳过调用 std 库函数(例如 std::vector 构造函数)的代码,则调试器将在 std lib 实现中停止,如果我尝试将其跨出更深一步!在我回到自己的代码之前可能需要多次(有时 10 次或更多)步出(而且我一开始就不想步入)。

视图中似乎总是有一个 _LIBCPP_DEBUG 宏以及 _LIBCPP_INLINE_VISIBILITY - 但这些似乎无处不在,所以我不确定它是否相关。不过,这似乎与内联的工作方式有关。

我无法找到任何其他人遇到此问题的示例 - 但是,对我而言,它已经在多个测试版中持续存在 - 进入发布 - 并通过完全重新安装操作系统。

还有其他人看过这个吗?- 但最好还是知道发生了什么?

4

2 回答 2

7

Xcode 4.5 中的 lldb 不处理内联函数的单步执行。libc++ 标准库有许多总是内联的函数,即使是在 -O0 下构建的,这也是一个问题。看起来 Jim Ingham 大约在一个月前就开始了这个工作,例如,请参阅第一个补丁http://llvm.org/viewvc/llvm-project?view=rev&revision=163044以及接下来一两周内的几个后续补丁,但当然,这些还没有在 lldb 的发布版本中。您可以从公共站点http://lldb.llvm.org/构建和使用 lldb 的命令行版本(具体参见http://lldb.llvm.org/build.html),唯一棘手的地方是请记住遵循 lldb/docs/code-signing.txt 中的代码签名说明。

于 2012-10-01T21:08:58.223 回答
1

我也看到了这一点,不仅是 libc++,还有 libstdc++(GNU C++ 标准库,由 GCC 和 C++03 模式中的 clang 使用)。我一直认为这是由于内联,我猜有时也会发生在调试版本中。

于 2012-10-01T08:54:34.407 回答