2017-04-19 44 views
2

我有這樣的代碼:如何瀏覽GDB或LLDB中的Rust enum字段?

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

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

我怎樣才能打印Foo實例的內存地址?

+1

Idiomatic Rust使用'PascalCase'作爲結構/枚舉/枚舉變體。由於你的類型的外殼對於這個問題並不重要,所以我改變了它們,這也改進了代碼突出顯示。 – Shepmaster

回答

4

在已經內置了鏽調試支持最近的GDB,您可以使用防鏽上下的語法:

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

GDB知道枚舉是哪個變種是在使用,因此x.0Foox (因爲Variant是一個元組)。 .id的名稱爲i32&取地址。

+0

我使用GNU gdb(GDB)7.12.1:'(gdb)p&x.0.id'打印 '防火牆調試格式已更改' – chabapok

+0

您正在使用什麼版本的防火牆?這可能是一個gdb的錯誤,但很難確定。我可以嘗試重現它。 –

+0

rustc 1.18.0-nightly(452bf0852 2017-04-19) – chabapok