LLVM通过Rust调试输出

LLVM debug output through rust

我正在寻找一种通过调用rust编译器(通过货物)读取LLVM调试输出的方法。我对LLVM ASAN的输出特别感兴趣。

要使用ASAN运行构建,可以执行以下操作:

1
cargo clean && RUSTFLAGS="-Zsanitizer=address" cargo build

但是我不知道获取调试日志输出的命令。

使用c声,我认为可以添加

1
-mllvm -debug-only=asan

作为编译器标志。

如何通过rustc提供类似该标志的内容?

我正在使用当前的rust源(https://github.com/rust-lang/rust/ commit 31f5d69)自己构建rustc。


rustc的等效编译器参数为

1
-C llvm-args=-debug-only=<LLVM DEBUG_TYPE>

-C部分允许访问用于生成rust代码的选项。

llvm-args部分告诉rustc将每个后续标志转发给LLVM。如果我理解正确,则可以在LLVM源代码中指定使用cl::opt()评估的每个LLVM选项。

因此使用ASAN构建rust应用程序并仅查看ASAN日志输出的完整命令为:

1
cargo clean && RUSTFLAGS="-C llvm-args=-debug-only=asan -Zsanitizer=address" cargo build

侧面说明:我认为在构建rust以查看相应的日志输出时,必须在config.toml中启用LLVM的调试模式。