You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GDB中查看Rust里lazy_static!宏定义的变量值?

解决Rust中lazy_static变量在GDB无法查看实际值的问题

lazy_static宏生成的静态变量是一个包装结构体,GDB默认只能看到它的公开占位字段,要查看实际初始化后的值,可以试试以下几种方法:

  • 直接访问内部存储字段
    lazy_static生成的类型内部会有一个存储实际值的字段(通常是__inner),你可以直接解引用这个字段的指针来获取值:

    p *LAPIC_ADDRESS.__inner.get()
    

    如果这个命令无效,先查看结构体的原始内存布局,确认内部字段名:

    ptype /r LAPIC_ADDRESS
    

    根据输出找到指向实际值的字段,再进行解引用操作。

  • 使用rust-gdb替代原生GDB
    Rust官方提供的rust-gdb对Rust的语法和宏展开结构支持更友好,启动调试时用rust-gdb代替gdb,然后可以直接调用lazy_static变量的get()方法获取值:

    p LAPIC_ADDRESS::get()
    
  • 添加调试辅助函数
    在代码中临时添加一个仅在调试模式下生效的辅助函数,直接返回lazy_static变量的引用:

    #[cfg(debug_assertions)]
    pub fn debug_lapic_addr() -> &'static Addr {
        &LAPIC_ADDRESS
    }
    

    编译后在GDB中调用这个函数即可查看值:

    p debug_lapic_addr()
    
  • 查看宏展开后的代码
    用rustc命令展开lazy_static宏,明确生成的结构体结构:

    rustc --pretty expanded your_code.rs
    

    根据展开后的代码,找到实际存储值的字段,再在GDB中针对性访问。

内容的提问来源于stack exchange,提问作者Chan S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 14:05:02