在rust语言中使用Cargo命令输出汇编文档
首先来一波效果展示:(这是我使用方法二输出的文档,使用vscode工具查看的结果)
正文如下:
一、您可以使用Cargo的cargo rustc
命令直接向rustc
发送参数:
方法一:
1 cargo rustc -- --emit asm 2 ls target/debug/deps/<crate_name>-<hash>.s
对于优化的装配:
1 cargo rustc --release -- --emit asm 2 ls target/release/deps/<crate_name>-<hash>.s
如果您看到多个<crate_name>-<hash>-<hash>.rcgu.s
档案,而不是一个<crate_name>-<hash>.s
档案,请设定环境变量CARGO_INCREMENTAL=0
来停用累加编译。
二、可以使用RUSTFLAGS
环境变量和标准的cargo命令:
方法二:
1 RUSTFLAGS="--emit asm" cargo build 2 cat target/debug/deps/project_name-hash.s
或者在发布模式下(经过优化):
1 RUSTFLAGS="--emit asm" cargo build --release 2 cat target/release/deps/project_name-hash.s
您可以将不同的值传递给--emit
参数,* 包括 *(但不限于):
mir
( rust 中间表现法)llvm-ir
(LLVM中间表示法)llvm-bc
(LLVM字节码)asm
(组件)
三、现有的两个答案(使用cargo rustc
和RUSTFLAGS
)都是使用标准工具获得汇编的最佳方法。如果您发现自己经常尝试查看汇编,您可能需要考虑使用the cargo asm
subcommand。在使用cargo install cargo-asm
安装它之后,您可以打印如下汇编:
方法三:
1 cargo build --release 2 cargo asm my_crate::my_function
不过,有几件事需要注意:
- 不确定函数的路径吗?只要运行
cargo asm
,它就会列出所有可以检查的符号。 - 在尝试查看程序集之前,您必须先查看
cargo build --release
,因为cargo asm
(显然)只查看已经存在的构建构件 - 你要检查的函数的代码必须是实际生成的。对于泛型函数来说,这意味着该函数必须用一个具体的类型进行示例化/单态化。如果你的机箱中没有这样的情况,你可以在顶层添加一个伪函数,它可以完成你想要检查的汇编的所有事情。
四、如果您只想查看汇编输出而不是保存它,例如判断它是否经过了良好的优化,那么一个简单的选项是用途:
(don'不要忘记将-O
添加到编译器选项框中)
总结 https://www.saoniuhuo.com/question/detail-2199731.html 链接中的回复。