这是 wasm-pack 的**未发布**文档,已发布的文档可在 Rust 和 WebAssembly 主文档网站上找到 。此处记录的功能可能在 wasm-pack 的发布版本中不可用。

src/utils.rs

utils.rs 的目的是定义 utils 模块,该模块包含单个函数 set_panic_hook。此函数成为 lib.rsutils 模块的一部分,如上一节所述。

如果未启用 console_error_panic_hook 功能,则 set_panic_hook 被定义为内联空函数。因此,使用它不会产生运行时性能或代码大小的损失。

我们将讨论

  1. 定义 set_panic_hook
  2. 什么是 console_error_panic_hook

1. 定义 set_panic_hook

#![allow(unused)]
fn main() {
pub fn set_panic_hook() {
    // When the `console_error_panic_hook` feature is enabled, we can call the
    // `set_panic_hook` function at least once during initialization, and then
    // we will get better error messages if our code ever panics.
    //
    // For more details see
    // https://github.com/rustwasm/console_error_panic_hook#readme
    #[cfg(feature = "console_error_panic_hook")]
    console_error_panic_hook::set_once();
}
}

在这里,我们定义了一个以 cfg 属性为前缀的函数。此属性 #[cfg(feature = "console_error_panic_hook")] 告诉 Rust 在编译时检查 console_error_panic_hook 功能是否已设置。如果已设置,它将调用此函数。如果没有,它不会调用!

2. 什么是 console_error_panic_hook

crate console_error_panic_hook 允许在 Web 浏览器中调试 Rust 崩溃消息,从而使调试 WebAssembly 代码变得更加容易。

让我们比较一下在启用和禁用该功能之前 Rust 代码崩溃时会发生什么

之前: "RuntimeError: Unreachable executed"

之后: "panicked at 'index out of bounds: the len is 3 but the index is 4', libcore/slice/mod.rs:2046:10"

为此,将配置一个 崩溃挂钩,该挂钩通过 JavaScript console.error 函数将崩溃记录到开发者控制台。

但请注意,console_error_panic_hook 并非完全自动,因此您需要确保在运行任何代码之前调用 utils::set_panic_hook()(并且可以多次安全地运行 set_panic_hook)。

有关更多详细信息,请参阅 console_error_panic_hook 存储库