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

如何遍历GDB或LLDB中的Rust enum字段?,gdb,rust,lldb,Gdb,Rust,Lldb,我有以下代码: struct Foo { id: i32, } enum Bar { Variant(Foo), } fn main() { let x = Bar::Variant(Foo { id: 100 }); println!("set breakpoint here"); } 如何打印Foo实例的内存地址 在最近一个内置了Rust调试支持的GDB中,您可以使用Rust ish语法: (gdb)p&x.0.id $3=(i32*)0x7fffffff

我有以下代码:

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

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

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

在最近一个内置了Rust调试支持的GDB中,您可以使用Rust ish语法:

(gdb)p&x.0.id
$3=(i32*)0x7fffffffe0f0

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

惯用的Rust将
PascalCase
用于结构/枚举/枚举变体。由于类型的大小写对问题不重要,因此我对它们进行了更改,这也改进了代码高亮显示。我正在使用GNU gdb(gdb)7.12.1:'(gdb)p&x.0。id“prints”Rust调试格式已更改“您使用的是什么版本的Rust?”?这可能是一个gdb错误,但很难确定。我可以试着复制它。rustc 1.18.0-每晚(452bf0852 2017-04-19)你需要一个更新的gdb。我不确定这是什么时候修复的,也许是在10月份。无论如何,GDB7.12有缺陷,但我从git构建的gdb没有。