如何在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
相关产品推荐
相关产品推荐

