Improve trap error messages (#831)
* Improve trap error messages The new trap error message for the issue #828 looks like: ``` thread 'main' panicked at 'a', /proc/self/fd/11:1:13 note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace. Error: failed to run main module `test.wasm` Caused by: 0: failed to invoke `_start` 1: wasm trap: unreachable, source location: @6cea wasm backtrace: 0: __rust_start_panic 1: rust_panic 2: std::panicking::rust_panic_with_hook::h57f0cff11449798f 3: std::panicking::begin_panic::hd620695467c5dd1f 4: test::main::ha54db001eabbde1b 5: std::rt::lang_start::{{closure}}::h5acfb82693695869 6: std::sys_common::backtrace::__rust_begin_short_backtrace::h39e8b9420da241f9 7: std::panicking::try::do_call::hb7ebfcd70d5f703e 8: __rust_maybe_catch_panic 9: std::rt::lang_start_internal::hd5f64f52a5c5315c 10: std::rt::lang_start::h2a51d79994dd0c4b 11: __original_main 12: _start ``` Closes #828 * Tidy up the style of the traps tests * Add some tests and module names
This commit is contained in:
@@ -78,7 +78,25 @@ impl fmt::Debug for Trap {
|
||||
|
||||
impl fmt::Display for Trap {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
self.inner.message.fmt(f)
|
||||
write!(f, "{}", self.inner.message)?;
|
||||
let trace = self.trace();
|
||||
if trace.is_empty() {
|
||||
return Ok(());
|
||||
}
|
||||
writeln!(f, "\nwasm backtrace:")?;
|
||||
for (i, frame) in self.trace().iter().enumerate() {
|
||||
let name = frame.module_name().unwrap_or("<unknown>");
|
||||
write!(f, " {}: {}!", i, name)?;
|
||||
match frame.func_name() {
|
||||
Some(name) => match rustc_demangle::try_demangle(name) {
|
||||
Ok(name) => write!(f, "{}", name)?,
|
||||
Err(_) => write!(f, "{}", name)?,
|
||||
},
|
||||
None => write!(f, "<wasm function {}>", frame.func_index)?,
|
||||
}
|
||||
writeln!(f, "")?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user