有什么方法可以跟踪 proc 宏中发生错误的位置吗?

sak*_*sak 5 rust rust-proc-macros

我正在实现一个 proc 宏,并在另一个板条箱中进行测试。当我编译客户端包时,proc 宏的调用站点抛出错误:

error: proc macro panicked
  --> foo/src/main.rs:17:1
Run Code Online (Sandbox Code Playgroud)

该错误发生在 proc 宏实现中。

这个错误不是很有帮助,因为它没有指出具体失败的地方。可以使用唯一的错误消息来找出它,但是作为跟踪的一部分,在 proc 宏实现中获得错误起源的确切文件和行号会简单得多。

有什么办法可以实现这一点吗?

Cha*_*man 6

有一个夜间 rustc 标志 ,-Zproc-macro-backtrace当 proc 宏发生恐慌时,它会打印回溯。

请注意,这是一个 rustc 标志,而不是 Cargo 标志,因此您需要像这样调用它:

cargo +nightly rustc -- -Zproc-macro-backtrace
Run Code Online (Sandbox Code Playgroud)

您还可以使用RUSTFLAGS

RUSTFLAGS="-Zproc-macro-backtrace" cargo check
Run Code Online (Sandbox Code Playgroud)