如何遍历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没有。