如何在GDB或LLDB中遍历Rust枚举字段?

4

我有这段代码:

struct Foo {
    id: i32,
}
enum Bar {
    Variant(Foo),
}

fn main() {
    let x = Bar::Variant(Foo { id: 100 });
    println!("set breakpoint here");
}

如何打印Foo实例的内存地址?


1
惯用的 Rust 代码使用 PascalCase 来表示结构体、枚举和枚举变量。由于类型的大小写对问题并不重要,我已经将它们更改了,这也提高了代码的可读性。 - Shepmaster
1个回答

7
在最近支持 Rust 调试的 GDB 中,您可以使用类似 Rust 的语法:
(gdb) p &x.0.id
$3 = (i32 *) 0x7fffffffe0f0

GDB知道正在使用枚举的哪个变量,因此x.0表示x中的Foo(因为Variant是一个元组)。.id表示i32&表示取地址。


我使用GNU gdb (GDB) 7.12.1:'(gdb)p &x.0.id'打印出“Rust调试格式已更改”。 - chabapok
你使用的 Rust 版本是什么?这可能是 gdb 的一个 bug,但很难确定。不过我可以尝试重现它。 - Tom Tromey
rustc 1.18.0-nightly (452bf0852 2017-04-19) - chabapok
1
你需要更新版本的gdb。我不确定这个问题是什么时候被修复的,可能是在去年十月份。无论如何,gdb 7.12存在这个bug,但是我从git上构建的gdb没有这个问题。 - Tom Tromey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接