大多数其他 STL 容器打印良好,但unordered_map
一团糟。
我operator <<
用于打印,但这不是关于打印,这是关于当我崩溃并且我想从 LLDB 提示符中打印出我的哈希值。
我不能调用类似的东西,call cout << var
因为那不起作用。
除了例如链接本身使用的模板函数之外,没有其他解决方案cout <<
吗?那还能用吗?(我正在尝试,但它不起作用,因为我必须提前知道模板参数类型将是什么,以便为它们生成和链接代码)
如果您愿意使用开源 lldb 并自己手动构建它,您可以使用 unordered_map 的合成提供程序:
作者:enrico 日期:2013 年 9 月 4 日星期三 12:48:52 新修订:189964
URL:http ://llvm.org/viewvc/llvm-project?rev=189964&view=rev日志:这是 libc++ 无序(多)地图和集合的示例合成提供程序 感谢 Jared Grubb 编写并分享它!
您应该能够检查unordered_map
对象本身,而无需对其调用方法。
例如,以这个简单的程序为例:
#include <iostream>
#include <string>
#include <unordered_map>
using namespace std;
int main() {
unordered_map<int, string> map;
map[0] = "mary";
map[1] = "had";
map[2] = "a";
map[3] = "little";
map[4] = "lamb";
return 0;
}
$ clang++ -std=c++11 -stdlib=libc++ -g unmap.cpp -o unmap
$ lldb unmap
Current executable set to 'unmap' (x86_64).
(lldb) break set --name main
lldb
为简洁起见未显示输出
(lldb) proc launch
n
输入 5 次直到return 0;
声明
(lldb)
Process 18063 stopped
* thread #1: tid = 0x1c03, 0x0000000100000aea unmap`main + 1082 at unmap.cpp:15, stop reason = step over
frame #0: 0x0000000100000aea unmap`main + 1082 at unmap.cpp:15
12 map[3] = "little";
13 map[4] = "lamb";
14
-> 15 return 0;
16 }
17
然后使用检查对象p
:
(lldb) p map[0]
(std::__1::unordered_map<int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<std::__1::pair<const int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > >::mapped_type) $2 = "mary"
(lldb) p map[1]
(std::__1::unordered_map<int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<std::__1::pair<const int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > >::mapped_type) $3 = "had"
(lldb) quit
您使用的版本lldb
会有所不同,因为它一直在改进:
$ lldb -version
LLDB-179.5
(即 Xcode 5 DP 6 命令行包附带的那个)