mirror of
https://github.com/mii443/wasmer.git
synced 2025-12-05 20:28:23 +00:00
This change adds a basic coredump generation after a WebAssembly trap was entered. The coredump includes rudimentary stack / process debugging information. A new CLI argument is added to enable coredump generation: ``` wasmer --coredump-on-trap=/path/to/coredump/file module.wasm ``` See docs/en/examples-coredump.md. Refs https://github.com/wasmerio/wasmer/issues/3578
63 lines
1.4 KiB
Markdown
63 lines
1.4 KiB
Markdown
# Using Wasm coredump
|
|
|
|
The following steps describe how to debug using Wasm coredump in Wasmer:
|
|
|
|
1. Compile your WebAssembly with debug info enabled; for example:
|
|
|
|
```sh
|
|
$ rustc foo.rs --target=wasm32-wasi -C debuginfo=2
|
|
```
|
|
|
|
<details>
|
|
<summary>foo.rs</summary>
|
|
|
|
fn c(v: usize) {
|
|
a(v - 3);
|
|
}
|
|
|
|
fn b(v: usize) {
|
|
c(v - 3);
|
|
}
|
|
|
|
fn a(v: usize) {
|
|
b(v - 3);
|
|
}
|
|
|
|
pub fn main() {
|
|
a(10);
|
|
}
|
|
</details>
|
|
|
|
2. Run with Wasmer and Wasm coredump enabled:
|
|
|
|
```sh
|
|
$ wasmer --coredump-on-trap=/tmp/coredump foo.wasm
|
|
|
|
thread 'main' panicked at 'attempt to subtract with overflow', foo.rs:10:7
|
|
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
|
|
Error: failed to run main module `foo.wasm`
|
|
|
|
Caused by:
|
|
0: Core dumped at /tmp/coredump
|
|
1: failed to invoke command default
|
|
2: error while executing at wasm backtrace:
|
|
...
|
|
```
|
|
|
|
3. Use [wasmgdb] to debug:
|
|
```sh
|
|
$ wasmgdb foo.wasm /tmp/coredump
|
|
|
|
wasmgdb> bt
|
|
...
|
|
#13 000175 as panic () at library/core/src/panicking.rs
|
|
#12 000010 as a (v=???) at /path/to/foo.rs
|
|
#11 000009 as c (v=???) at /path/to/foo.rs
|
|
#10 000011 as b (v=???) at /path/to/foo.rs
|
|
#9 000010 as a (v=???) at /path/to/foo.rs
|
|
#8 000012 as main () at /path/to/foo.rs
|
|
...
|
|
```
|
|
|
|
[wasmgdb]: https://crates.io/crates/wasmgdb
|