【问题标题】:How to walk through Rust enum fields in GDB or LLDB?如何遍历 GDB 或 LLDB 中的 Rust 枚举字段?
【发布时间】:2017-09-15 18:51:24
【问题描述】:

我有这个代码:

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

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

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

【问题讨论】:

  • Idiomatic Rust 将PascalCase 用于结构/枚举/枚举变体。由于您的类型的大小写对问题并不重要,因此我更改了它们,这也改进了代码突出显示。

标签: gdb rust lldb


【解决方案1】:

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

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

GDB 知道枚举的哪个变体正在使用,所以x.0x 中命名Foo(因为Variant 是一个元组)。 .id 命名 i32& 获取地址。

【讨论】:

  • 我使用 GNU gdb (GDB) 7.12.1: '(gdb) p &x.0.id' prints 'Rust debug format has changed'
  • 你使用的是什么版本的 rust?这可能是一个 gdb 错误,但很难确定。不过我可以尝试重现它。
  • rustc 1.18.0-nightly (452bf0852 2017-04-19)
  • 您需要更新的 gdb。我不确定这是什么时候修复的,可能是在 10 月。无论如何,gdb 7.12 有 bug,但我从 git 构建的 gdb 没有。
猜你喜欢
  • 2016-06-08
  • 1970-01-01
  • 2014-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-12
  • 2011-09-01
  • 2023-03-03
相关资源
最近更新 更多