这是一个简单的 Rust 示例,涉及 Vec
和 HashMap
,我正在 GDB 中运行它:
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漂亮的打印机似乎已启用,因为Vec
被很好地打印出来了。如何在常规GDB中获取
HashMap
键和值?