You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
# Debugging WebAssembly
|
|
|
|
|
|
|
|
The following steps describe a common way to debug a WebAssembly module in
|
|
|
|
Wasmtime:
|
|
|
|
|
|
|
|
1. Compile your WebAssembly with debug info enabled, usually `-g`; for
|
|
|
|
example:
|
|
|
|
|
|
|
|
```sh
|
|
|
|
clang foo.c -g -o foo.wasm
|
|
|
|
```
|
|
|
|
|
|
|
|
2. Run Wasmtime with the debug info enabled; this is `-g` from the CLI and
|
|
|
|
`Config::debug_info(true)` in an embedding (e.g. see [debugging in a Rust
|
|
|
|
embedding](./examples-rust-debugging.md))
|
|
|
|
|
|
|
|
3. Use a supported debugger:
|
|
|
|
|
|
|
|
```sh
|
|
|
|
lldb -- wasmtime run -g foo.wasm
|
|
|
|
```
|
|
|
|
```sh
|
|
|
|
gdb --args wasmtime run -g foo.wasm
|
|
|
|
```
|
|
|
|
|
|
|
|
If you run into trouble, the following discussions might help:
|
|
|
|
|
|
|
|
- On MacOS with LLDB you may need to run: `settings set
|
|
|
|
plugin.jit-loader.gdb.enable on`
|
|
|
|
([#1953](https://github.com/bytecodealliance/wasmtime/issues/1953))
|
|
|
|
- With LLDB, call `__vmctx.set()` to set the current context before calling any
|
|
|
|
dereference operators
|
|
|
|
([#1482](https://github.com/bytecodealliance/wasmtime/issues/1482)):
|
|
|
|
```sh
|
|
|
|
(lldb) p __vmctx->set()
|
|
|
|
(lldb) p *foo
|
|
|
|
```
|
|
|
|
- The address of the start of instance memory can be found in `__vmctx->memory`
|