【问题标题】:What is the recommended way to propagate panics in Rust tokio code?在 Rust tokio 代码中传播恐慌的推荐方法是什么?
【发布时间】:2021-03-24 22:10:38
【问题描述】:

现在我的恐慌正在被吞没。在我的用例中,我希望它使整个程序崩溃并打印堆栈跟踪。应该如何配置?

【问题讨论】:

    标签: rust tokio


    【解决方案1】:

    恐慌通常不会被吞下,而是在等待从tokio::task::spawn()tokio::task::spawn_blocking() 返回的tokio::task::JoinHandle 时作为错误返回,并且可以相应地处理。

    如果在 Tokio 运行时发生恐慌,则会将错误消息打印到 stderr,如下所示:“thread 'tokio-runtime-worker' panicked at 'Panicking...', src\main.rs:26:17”。如果您在环境变量 RUST_BACKTRACE 设置为 1 的情况下运行二进制文件,也会打印堆栈跟踪。

    与所有 Rust 程序一样,您可以使用 std::panic::set_hook() 设置自己的恐慌处理程序,以便在打印如下恐慌信息后任何线程恐慌时退出:

    let default_panic = std::panic::take_hook();
    std::panic::set_hook(Box::new(move |info| {
        default_panic(info);
        std::process::exit(1);
    }));
    

    【讨论】:

      猜你喜欢
      • 2021-06-11
      • 1970-01-01
      • 1970-01-01
      • 2015-11-09
      • 1970-01-01
      • 2022-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多