当前位置:嗨网首页>书籍在线阅读

15-调试宏程序

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

9.13 调试宏程序

在开发复杂的宏时,大多数情况下,你需要分析代码如何扩展为宏提供的输入。

虽然可以在你希望看到生成代码的位置使用println!或panic!宏,但是这是一种非常粗糙的调试方法。有一些更好的解决方案可供我们选择。Rust社区为我们提供了一个名为cargo-expand的子命令。该子命令由David Tonlay开发,并且他是syn和quote软件包的作者。该命令会在内部调用夜间版编译器标志-Zunstable-options -- pretty=expanded,不过子命令的构造就是如此,它不需要你手动切换到夜间版编译器,因为它会自动完成切换。为了演示这个命令,我们将以IntoMap派生宏为例,分析它为我们生成的代码。通过切换目录,并运行cargo expand命令,我们得到以下输出结果:

141.png 如你所见,底部的impl代码块是由IntoMap派生宏产生的。cargo-expand还支持美化输出和语法高亮输出结果。此命令是编写复杂宏程序的必备工具。