如何在箱子之间找到宏的使用位置?

时间:2017-02-16 15:12:33

标签: debugging macros rust

当宏导致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

0 个答案:

没有答案