当宏导致crates之间(直接或间接)发生混乱时,使用宏的代码行不会包含在反向跟踪中。
这使得无法知道宏的哪个使用引起了恐慌。
意思是,如果您在许多地方使用了宏,则无法找到要关注的代码行。
我遇到了这个问题,因为我的测试是直接分开的,并使用他们测试的代码作为包。
Git repository以下示例。
Process process = Process.Start(@"C:\Users\Happy\Desktop\model\MPUTeapot.exe");
int id = process.Id;
Process tempProc = Process.GetProcessById(id);
this.Visible = false;
tempProc.WaitForExit();
this.Visible = true;
tests/tests.rs
extern crate test_macro;
#[test]
fn main() {
let file: Vec<u8> = Vec::new();
test_macro::decode_main(&*file).unwrap();
}
src/lib.rs
通话:
use ::std::io;
macro_rules! read_exact {
($f:expr, $r:expr) => {
io::Read::read_exact($f, $r).unwrap()
}
}
fn decode_blocks<R: io::Read>(mut file: R) -> Result<(), io::Error> {
let mut bhead: [u8; 320] = [0; 320];
read_exact!(&mut file, &mut bhead); // <-- this line isn't in the backtrace
Ok(())
}
pub fn decode_main<R: io::Read>(mut file: R) -> Result<(), io::Error> {
decode_blocks(file)?;
Ok(())
}
给予回溯:
RUST_BACKTRACE=1 cargo test
通知第11行不包括在内。
使用Rust stable 1.15。将此报告为错误#39894。