【问题标题】:Stepping through the code is stopping on STL code when debugging c++ with Xcode 4.5使用 Xcode 4.5 调试 c++ 时,单步执行代码会在 STL 代码上停止
【发布时间】:2012-10-27 11:50:43
【问题描述】:

我尝试使用 Xcode 4.5 调试 c++ 代码,并使用 llvm 4.1 编译。代码很简单,只需要在一张地图中插入几项即可。

当我跳过 STL 函数时,执行会在 STL 代码中停止,而不是像往常一样执行该步骤。

当我使用 LLVM-GCC 4.2 编译时,调试很好,但是这个编译器不支持 C++11。

有没有人遇到过这个问题,知道能不能解决吗?

【问题讨论】:

    标签: c++ xcode debugging c++11 xcode4.5


    【解决方案1】:

    自从 LLDB 被引入 Xcode 以来,我当然会遇到同样的问题。似乎它不能正确处理跨内联函数(参见:Debugger steps deeper when trying to step out of C++11 std lib)。

    我刚刚向 Apple (ID 12588579) 提交了一份错误报告,但我猜在 LLDB 完全准备好在 C++11 生产代码中使用之前需要进行几次迭代(它已经到了那里,记住Xcode 附带的版本在 4.4 之前根本无法使用)。

    【讨论】:

      【解决方案2】:

      Xcode 4.5.x 中的 lldb 不支持单步执行内联函数。 C++11 标准库即使在 -O0 时也具有激进的函数内联,所以这个问题尤其明显。内联步进支持已被添加到 lldb,v.http://llvm.org/viewvc/llvm-project?view=rev&revision=163044 并且可在源代码中使用 http://lldb.llvm.org/ 但您将无法用这些源代码替换 Xcode 中的 lldb(API 自 4.5 以来已更改被释放)。

      请注意,单步执行内联函数(使它们在您在调试器中工作时看起来像是“真实”函数)是一项复杂的功能,并且由 clang 生成的调试信息中的任何不准确都可能导致错误的单步行为。由于调试信息不​​足或 lldb 中的错误,存在(并且仍然会存在)无法正常工作的极端情况——这很难做到 100% 正确。

      你可以尝试通过把 C++11 std lib 编程的麻烦减少一点

      settings set target.process.thread.step-avoid-regexp ^[^ ]+ std::|^std::
      

      在您的~/.lldbinit 文件中。我认为这对内联函数没有帮助,但如果对 stdlib 方法的调用不合时宜,它至少会跳过它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-27
        • 2018-01-19
        • 1970-01-01
        相关资源
        最近更新 更多