LLDB:如何检查unordered_map

时间:2013-09-11 04:33:52

标签: c++ xcode c++11 lldb

大多数其他STL容器打印正常,但unordered_map是一团糟。

我使用operator <<进行打印,但这与打印无关,这与我崩溃时的情况有关,我想从LLDB提示中打印出我的哈希值。

我无法调用类似call cout << var的内容,因为这不起作用。

除了例如,没有解决方案吗?链接自己使用cout <<的模板函数?那甚至会起作用吗? (我正在尝试,但它不起作用,因为我必须提前知道模板参数类型将为它生成和链接代码的内容)

2 个答案:

答案 0 :(得分:0)

您应该能够检查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命令行包附带的那个)

答案 1 :(得分:0)

如果您愿意使用开源lldb并亲自手工构建,那么您可以使用unordered_map的合成提供程序:

  

作者:enrico日期:Wed Sep 4 12:48:52 2013 New Revision:189964

     

网址:http://llvm.org/viewvc/llvm-project?rev=189964&view=rev日志:此   是libc ++无序(多)映射和集合的示例合成提供程序   感谢Jared Grubb编写并分享它!