2017-04-19 11 views
2

私はこのコードを持っている:GDBまたはLLDBの錆の列挙型フィールドをどのように歩くのですか?

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

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

にはどうすればFooインスタンスのメモリアドレスを印刷することができますか?ビルトインた錆デバッグサポートを最近GDBで

+1

イディオマティック・ラストは構造体/列挙型/列挙型に 'PascalCase'を使用しています。あなたのタイプのケーシングは質問にとって重要ではないので、私はそれらを変更しました。これはまた、コードハイライトを改善します。 – Shepmaster

答えて

4

は、あなたが錆っぽいの構文を使用できます。

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

GDBは、列挙型のバリアントが使用されているかを知っているので、x.0xFooVariantはタプルなので)。 .idの名前はi32&となります。

+0

GNU gdb(GDB)7.12.1を使用しています: '(gdb)p&x.0.id'が表示されます '錆のデバッグ形式が変更されました' – chabapok

+0

あなたはどのバージョンの錆を使用していますか?おそらくgdbのバグですが、確かに分かりにくいです。私はそれを再現しようとすることができます。 –

+0

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

関連する問題