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_variables)] #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
儲存庫。