hashmap - 我如何在 GDB 中漂亮地打印 Rust HashMap?

标签 hashmap rust gdb

这是我在 GDB 中运行的带有 VecHashMap 的简单 Rust 示例:

use std::collections::HashMap;

fn main() {
    let v = vec!["Mon", "Tue", "Wed"];
    println!("{:?}", v);

    let mut h = HashMap::new();
    h.insert(1,"Jan");
    h.insert(2,"Feb");
    h.insert(3,"Mar");
    h.insert(4,"Apr");
    println!("{:?}", h);
}

当我查看 Vec 时,它打印得很漂亮,而 HashMap 不是:

bash$ rust-gdb target/debug/test_hashmap
GNU gdb (GDB) 8.1
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-pc-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from target/debug/test_hashmap...done.
(gdb) b 12
Breakpoint 1 at 0xa056: file src/main.rs, line 12.
(gdb) r
Starting program: /home/john/proj/test_hashmap/target/debug/test_hashmap 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/usr/lib/libthread_db.so.1".
["Mon", "Tue", "Wed"]

Breakpoint 1, test_hashmap::main () at src/main.rs:12
12          println!("{:?}", h);
(gdb) p v
$1 = Vec<&str>(len: 3, cap: 3) = {"Mon", "Tue", "Wed"}
(gdb) p h
$2 = HashMap<i32, &str, std::collections::hash::map::RandomState> = {hash_builder = RandomState = {k0 = 12919411587537124140, 
    k1 = 836420561220520453}, table = RawTable<i32, &str> = {capacity_mask = 31, size = 4, hashes = TaggedHashUintPtr = {
      Unique<usize> = {pointer = NonZero<*const usize> = {0x7ffff6c1c400}, _marker = PhantomData<usize>}}, 
    marker = PhantomData<(i32, &str)>}, resize_policy = DefaultResizePolicy}
(gdb) info pretty-printer
global pretty-printers:
  builtin
    mpx_bound128
  objfile /home/john/proj/test_hashmap/target/debug/test_hashmap pretty-printers:
  rust_pretty_printer_lookup_function
(gdb) n
{1: "Jan", 4: "Apr", 3: "Mar", 2: "Feb"}
13      }
(gdb) 

该程序看到了 HashMap(并正常打印它的值),但我在 GDB 中看不到那些。 Rust pretty-print 似乎已启用,因为 Vec 打印得很好。

如何在常规 GDB 中获取 HashMap 键和值?

最佳答案

目前无法为 HashMap 漂亮地打印键值项。

an open issue requesting this feature .

关于hashmap - 我如何在 GDB 中漂亮地打印 Rust HashMap?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50179667/

相关文章:

java - 将 HashMap 转换为排序的 ArrayList

java - 在 Java 中访问深度嵌套的 HashMap

java - 当在 hashmap 中放入相同的键时,hashmap 是否会在与 equals 比较之前也比较引用?

haskell - 类似于 Haskell 的 MultiParamTypeClasses

php - gdb 显示奇怪的无符号线程导致 SIGSEGV - 它是什么?

data-structures - 电话簿的数据结构,它可以按姓名搜索号码,也可以按号码搜索姓名

rust - 从 rust 向量中间开始的单次循环迭代

rust - 将本地字符串作为切片返回 (&str)

emacs - 人们如何在 ECB Emacs 中进行调试?

gdb - 如何在 GDB 中的函数结束时停止(不退出)?