无法跟踪Rust应用中Serde导致的回溯错误

时间:2018-03-02 06:25:11

标签: linux rust

我在远程服务器上有一个Rust网站,我运行:

  RUST_BACKTRACE=1 nohup  /home/my_user/app123 &

当它关闭并且我检查nohup.log时,我只看到这个:

04:52:22 [WARN] unexpected chunk when body cannot write
04:52:23 [WARN] unexpected chunk when body cannot write
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: ErrorImpl { code: EofWhileParsingValue, line: 1, column: 0 }', /checkout/src/libcore/result.rs:906:4
stack backtrace:
   0: <std::time::Instant as core::fmt::Debug>::fmt
   1: <std::time::Instant as core::fmt::Debug>::fmt
   2: <std::time::Instant as core::fmt::Debug>::fmt
   3: <std::time::Instant as core::fmt::Debug>::fmt
   4: <std::time::Instant as core::fmt::Debug>::fmt
   5: <std::time::Instant as core::fmt::Debug>::fmt
   6: <std::time::Instant as core::fmt::Debug>::fmt
   7: <std::time::Instant as core::fmt::Debug>::fmt
   8: <core::cell::BorrowMutError as core::fmt::Debug>::fmt
   9: 
  10: 
  11: 
  12: 
  13: <hyper::version::HttpVersion as core::fmt::Debug>::fmt
  14: 
  15: <std::time::duration::Duration as core::fmt::Debug>::fmt
  16: <std::time::Instant as core::fmt::Debug>::fmt
  17: 
  18: <unknown>

如何追踪错误?这与Serde JSON有关,但具体到底是什么?我的应用程序中有很多地方可能会出现这种情况。

1 个答案:

答案 0 :(得分:4)

堆栈中没有任何行号回溯,因此服务器上运行的二进制文件必须是在没有调试符号的情况下构建的。如How to get a release build with debugging information when using cargo?中所述,将以下部分添加到主二进制文件的Cargo.toml

[profile.release]
debug = true

这将包括二进制文件中的文件名和行号信息,可以在发生恐慌时打印,使您的堆栈回溯在将来更有用。

  

ErrorImpl { code: EofWhileParsingValue, line: 1, column: 0 }

现在,我们可以在没有回溯的情况下判断出最好的是你试图解析一个空的JSON字符串。例如,以下内容会触发相同的错误。

extern crate serde_json;

fn main() {
    let _: u64 = serde_json::from_str("").unwrap();
}

提醒一下,Result::unwrap()不适合处理生产应用程序中的错误。 ; - )