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

cha*_*pok 3 gdb rust lldb

我有以下代码:

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

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

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

Tom*_*mey 5

在具有内置Rust调试支持的最新GDB中,可以使用Rust-ish语法:

(gdb) p &x.0.id
$3 = (i32 *) 0x7fffffffe0f0
Run Code Online (Sandbox Code Playgroud)

GDB知道正在使用哪个枚举变量,因此将其x.0命名为Fooin x(因为Variant是元组)。将.id命名为i32,并&获取地址。