gdb 7为STL结构http://sourceware.org/gdb/wiki/STLSupport
提供了一些有用的python脚本lldb有类似的工具吗? 即使使用简单的地图或矢量,显示的信息也非常神秘。
-> 100 h->moveReceivedSummaries(summaries);
101 auto res = h->moveReceivedSummaries();
102 EXPECT_TRUE(*summary == *res[1].get());
103 }
(lldb) p summaries
(std::__1::map<int, std::__1::unique_ptr<ContextSummary, std::__1::default_delete<ContextSummary> >, std::__1::less<int>, std::__1::allocator<std::__1::pair<const int, std::__1::unique_ptr<ContextSummary, std::__1::default_delete<ContextSummary> > > > >) $0 = size=1 {
(std::__1::__tree_node<std::__1::pair<int, std::__1::unique_ptr<ContextSummary, std::__1::default_delete<ContextSummary> > >, void *>::value_type) [0] = {
(int) first = 1
(std::__1::unique_ptr<ContextSummary, std::__1::default_delete<ContextSummary> >) second = {
(std::__1::__compressed_pair<ContextSummary *, std::__1::default_delete<ContextSummary> >) __ptr_ = {
(std::__1::__libcpp_compressed_pair_imp<ContextSummary *, std::__1::default_delete<ContextSummary> >) std::__1::__libcpp_compressed_pair_imp<ContextSummary *, std::__1::default_delete<ContextSummary> > = {
(ContextSummary *) __first_ = 0x0000000100308390
}
}
}
}
}
答案 0 :(得分:2)
漂亮打印机最初关注的是用于Mac / iOS应用程序开发的AppKit / UIKit类型,现在正在添加C ++格式化程序。例如,Xcode 4.6.3:
(lldb) p string_map
(StringMapT) $0 = size=2 {
(std::__1::__tree_node<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, void *>::value_type) [0] = {
(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) first = "hi"
(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) second = "there"
}
(std::__1::__tree_node<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, void *>::value_type) [1] = {
(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) first = "this"
(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) second = "that"
}
}
树顶lldb:
(lldb) p string_map
(StringMapT) $0 = size=2 {
[0] = {
first = "hi"
second = "there"
}
[1] = {
first = "this"
second = "that"
}
}
请记住,目前在Mac OS X上有两个常用的C ++库版本 - GNU libstdc ++库和新的llvm libcxx库,目标是C ++ 11(v。http://libcxx.llvm.org)。这两个库中的每一个都需要不同的数据格式化器。
lldb有一个丰富的扩展语言,用于添加自己的类型格式化程序,既可以指定要打印的现有元素,也可以调用Python来格式化打印类型。目标是让内置格式化程序处理常见的C ++ / Objective-C类型,但如果您愿意自己编写,则不限于lldb提供的那些类型。有关详细信息,请参阅http://lldb.llvm.org/varformats.html。
答案 1 :(得分:2)
我认为最简单的解决方案就是在使用Mac OS X时使用Xcode。
在lldb中,跟随(How can I get sensible variable displays when using libc++ in Xcode 4.3.1?),我从this site下载python脚本后尝试使用command script import ../libcxx.py
。
然而,结果是一样的。
(lldb) p v
(std::__1::vector<std::__1::unique_ptr<A, std::__1::default_delete<A> >, std::__1::allocator<std::__1::unique_ptr<A, std::__1::default_delete<A> > > >) $4 = size=0 {
[0] = {
__ptr_ = {
std::__1::__libcpp_compressed_pair_imp<A *, std::__1::default_delete<A> > = {
__first_ = 0x0000000100200000
}
}
}
}