Rust宏调试与不安全代码使用指南
1. 宏调试
在开发复杂宏时,我们常常需要分析代码如何根据输入进行展开。虽然可以使用 println!
或 panic!
来查看生成的代码,但这是一种比较粗糙的调试方式。Rust社区提供了一个名为 cargo-expand
的子命令,它由David Tonlay开发,代码托管在 https://github.com/dtolnay/cargo-expand ,他也是 syn
和 quote
crate的作者。
这个命令内部调用了夜间版编译器标志 -Z unstable-options --pretty=expanded
,但设计上不需要手动切换到夜间版工具链,它会自动完成切换。以下是使用示例,以 IntoMap
派生宏为例,切换到相应目录并运行 cargo expand
:
As you can see, the impl block at the bottom is what was generated by
the IntoMap derive macro. cargo-expand also includes pretty printed syntax
highlighted output.