How do I debug a wasm that is crashing? lets say I have something like this
thread::spawn(move || {
let instance = linker.instantiate(&mut store, &module).unwrap();
let handle_rpc = instance
.get_typed_func::<(), (), _>(&mut store, "handle_rpc")
.unwrap();
for msg in io_rx {
if let Ok(msg) = serde_json::to_string(&msg) {
let _ = writeln!(stdin.write().unwrap(), "{msg}");
}
let _ = handle_rpc.call(&mut store, ());
}
});
and io_rx
is a channel receiver, lets say a message causes the instance
to crash. How do I get back some information? Is the a handler that I can pass to instance that gets executed when the wasm itself crash?
If the wasm code traps, you will get an error result returned from handle_rpc.call()
. You should likely handle this error instead of throwing it away and silencing the lint against this using let _ =
.
The error result contains a backtrace of the wasm code. For as long as your module has a names section you will get names for all functions. If there is no names section, you will only get function indexes.
Last updated: Dec 23 2024 at 14:03 UTC