Debugging
Panics
We strongly recommend the console_error_panic which catches panic!
s and outputs them to the console. Unfortunately this is not compatible with apps built using cargo-web
. You probably don’t need to enable this manually. If you mount your application using yew::start_app()
, Yew will automatically catch panic!
s and log them to your browser’s console. In some situations you might not be able to use yew::start_app()
to mount your application, in which case you can call yew::initialize()
before starting your application to configure this. Under the hood yew::start_app()
calls yew::initialize()
(which will enable the panic!
hook).
Console Logging
In general, Wasm web apps are able to interact with Browser APIs, and the console.log
API is no exception. There are a few options available:
wasm-logger
This crate integrates with the familiar Rust log
crate:
// setup
fn main() {
wasm_logger::init(wasm_logger::Config::default());
}
// usage
log::info!("Update: {:?}", msg);
ConsoleService
This service is included within Yew and is available when the “services” feature is enabled (the “services” feature is enabled by default):
use yew::services::ConsoleService;
// usage
ConsoleService::info(format!("Update: {:?}", msg).as_ref());
Source Maps
There is currently no first-class support for source maps for Rust / Wasm web apps. This, of course, is subject to change. If this is no longer true or if progress is made, please suggest a change!
Latest Info
[Dec 2019] Chrome DevTools update
There is still quite a bit of work to do though. For example, on the tooling side, Emscripten (Binaryen) and wasm-pack (wasm-bindgen) don’t support updating DWARF information on transformations they perform yet.
[2020] Rust Wasm debugging guide
Unfortunately, the debugging story for WebAssembly is still immature. On most Unix systems, DWARF is used to encode the information that a debugger needs to provide source-level inspection of a running program. There is an alternative format that encodes similar information on Windows. Currently, there is no equivalent for WebAssembly.
[2019] Rust Wasm roadmap
Debugging is tricky because much of the story is out of this working group’s hands, and depends on both the WebAssembly standardization bodies and the folks implementing browser developer tools instead.