src/utils.rs
utils.rs
的目的是定義 utils
模組,其中包含一個函式 set_panic_hook
。 如上一節所述,此函式將成為 lib.rs
中 utils
模組的一部分。
如果未啟用 console_error_panic_hook
功能,則 set_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
允許在網路瀏覽器中除錯 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"
為此,配置了一個 恐慌鉤子 (panic hook),它透過 JavaScript 的 console.error
函式將恐慌訊息記錄到開發者控制台。
但請注意,console_error_panic_hook
並非完全自動化的,因此您需要確保在任何程式碼執行之前呼叫 utils::set_panic_hook()
(並且多次執行 set_panic_hook
是安全的)。
有關更多詳細資訊,請參閱 console_error_panic_hook
儲存庫。