加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – LLDB:如何检查unordered_map

发布时间:2020-12-14 19:36:52 所属栏目:百科 来源:网络整理
导读:大多数其他STL容器打印正常,但unordered_map是一个烂摊子. 我使用operator对于打印,但这不是关于打印,这是关于我崩溃的时候,我想从LLDB提示打印出我的哈希. 我不能打电话给cout var因为那不起作用. 是否除了例如链接模板函数本身使用cout那甚至会起作用吗?
大多数其他STL容器打印正常,但unordered_map是一个烂摊子.

我使用operator<<对于打印,但这不是关于打印,这是关于我崩溃的时候,我想从LLDB提示打印出我的哈希. 我不能打电话给cout<< var因为那不起作用. 是否除了例如链接模板函数本身使用cout<<<那甚至会起作用吗? (我正在尝试,但它不起作用,因为我必须提前知道模板参数类型将为它生成和链接代码的内容)

解决方法

您应该能够检查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次直到返回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::allocator<char> > > > >::mapped_type) $2 = "mary"
(lldb) p map[1]
(std::__1::unordered_map<int,std::__1::allocator<char> > > > >::mapped_type) $3 = "had"
(lldb) quit

你使用的lldb版本会有所不同,因为它一直在改进:

$lldb -version
LLDB-179.5

(即Xcode 5 DP 6命令行包附带的那个)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读