我尝试使用llvm 4.1编译的Xcode 4.5调试c ++代码。代码非常简单,只需将几个项目插入地图即可。
当我跳过STL函数时,执行在STL代码中停止,而不是像往常一样执行该步骤。
当我使用LLVM-GCC 4.2编译时,调试很好,但是这个编译器没有C ++ 11支持。
之前是否有人遇到此问题,并知道是否可以修复?
答案 0 :(得分:2)
自从LLDB被引入Xcode以来,我当然可以遇到同样的问题。它似乎无法正确处理内联函数(参见:Debugger steps deeper when trying to step out of C++11 std lib)。
我刚刚向Apple提交了一个错误报告(ID 12588579),但我猜测在LLDB完全准备好在C ++ 11生产代码中使用之前需要进行几次迭代(它已经到了那里,请记住Xcode附带的版本在4.4)之前根本不可用。
答案 1 :(得分:2)
Xcode 4.5.x中的lldb不支持单步执行内联函数。即使在-O0构建时,C ++ 11标准库也具有强大的函数内联,因此这个问题尤其明显。内联步进支持已经添加到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方法的调用不合适,它至少会超越它。