如何找出涉及宏的编译器错误源自何处?

时间:2016-05-21 17:10:44

标签: compiler-errors macros rust

当我编译包含错误的代码时,编译器并没有指向我输入错误的实际行。当我使用宏时会发生这种情况,例如: with io.open(file_path, 'w') as file: self.blob_service.get_blob_to_stream(container_name='container', blob_name=blob_name, stream=file)

这是一个示例错误:

try!

我希望<std macros>:5:8: 6:45 error: mismatched types [E0308] <std macros>:5 return $ crate :: result :: Result :: Err ( ^ <std macros>:5:8: 6:45 note: in this expansion of try! (defined in <std macros>) <std macros>:5:8: 6:45 help: run `rustc --explain E0308` to see a detailed explanation <std macros>:5:8: 6:45 note: expected type `std::path::PathBuf` <std macros>:5:8: 6:45 note: found type `std::result::Result<_, _>` 能够指向我实际编辑过的导致错误的文件行,但我只看到来自rustc的行。

有没有办法找出问题的来源,或者我应该评论和取消注释所有可能的候选人?

修改

一般问题看起来或多或少像这样

std::macros

我将use std::result::Result; use std::path::PathBuf; fn get_destination_path() -> PathBuf { PathBuf::from(try!(get_res())) } fn get_res() -> Result<String, String> { Ok("a".to_string()) } 声明为返回get_destination_path而不是PathBuf,这会导致错误。

我发现只有当我使用nigtly版本的Result<PathBuf, String>(我在货物项目目录中执行rustc)时才会发生这种情况。

当我使用常规生锈时,我会得到更好的错误

multirust override nightly

所以这发生在error: main function not found <std macros>:5:8: 6:42 error: mismatched types: expected `std::path::PathBuf`, found `core::result::Result<_, _>` (expected struct `std::path::PathBuf`, found enum `core::result::Result`) [E0308] <std macros>:5 return $ crate:: result:: Result:: Err ( <std macros>:6 $ crate:: convert:: From:: from ( err ) ) } } ) src/main.rs:6:18: 6:33 note: in this expansion of try! (defined in <std macros>) 上,可能只是一个错误。

0 个答案:

没有答案