Debugging 在使用libc++;在Xcode 4.3.1中?

Debugging 在使用libc++;在Xcode 4.3.1中?,debugging,xcode4.3,lldb,libc++,Debugging,Xcode4.3,Lldb,Libc++,我正在使用Xcode 4.3.1的C++11语言方言以及libc++作为标准库。这种组合的语言支持令人惊讶,但调试是一种折磨。Xcode的“摘要格式”和lldb的摘要格式功能都不会以漂亮的打印方式显示任何标准类型(std::string、std::vector等)。由于这些类型的复杂性,为它们编写漂亮的打印机是非常不平凡的。(例如,std::string在libc++中非常复杂。) 在这种情况下,其他开发人员是如何获得STL类型的体面变量显示的?或者还没有其他人将libc++与Xcode/lld

我正在使用Xcode 4.3.1的C++11语言方言以及libc++作为标准库。这种组合的语言支持令人惊讶,但调试是一种折磨。Xcode的“摘要格式”和lldb的摘要格式功能都不会以漂亮的打印方式显示任何标准类型(std::string、std::vector等)。由于这些类型的复杂性,为它们编写漂亮的打印机是非常不平凡的。(例如,std::string在libc++中非常复杂。)

在这种情况下,其他开发人员是如何获得STL类型的体面变量显示的?或者还没有其他人将libc++与Xcode/lldb一起使用?

W ll在lldb存储库中有支持。这就是我所做的:

svn co http://llvm.org/svn/llvm-project/lldb/trunk lldb
(我得到了修订版160855) 在Xcode的lldb外壳中,您可以执行以下操作:

command script import  /Users/arne/oss/lldb/examples/synthetic/libcxx.py
之后,lldb将std::vector、std::map、std::string和std::map的格式设置得更为精确:

(lldb) p rv
(std::__1::vector<unsigned long, std::__1::allocator<unsigned long> >) $3 = size=2 {
  (unsigned long) [0] = 503
  (unsigned long) [1] = 503
}
(lldb)p rv
(标准:向量)$3=size=2{
(无符号长)[0]=503
(无符号长)[1]=503
}
我已经用Xcode 4.4测试过了。应与Xcode 4.3类似


可以将该命令放在.lldbinit文件中。即使是Xcode也会显示格式良好的结构。

此功能在Xcode 4.4中正常工作。对于Xcode 4.3用户来说,最好的解决方案就是简单地更新Xcode。

在Xcode 4.3.3中,当我尝试上述方法时,在第二步(“命令脚本导入…”)lldb外壳会给出一条错误消息,该消息的结论是:“导入错误:没有名为formatters.Logger的模块。”我对lldb的了解还不足以解释这一点。这可能是4.3的问题吗?我认为对于4.3.3,您需要一个旧版本的脚本。但我不知道lldb svn中的哪一个反转适用于Xcode 4.3.Upvote,尽管这不再是“最佳”答案,因为它对于一般的自定义类型非常有用。