1# Debugging WebAssembly 2 3The following steps describe a common way to debug a WebAssembly module in 4Wasmtime: 5 61. Compile your WebAssembly with debug info enabled, usually `-g`; for 7 example: 8 9 ```sh 10 clang foo.c -g -o foo.wasm 11 ``` 12 132. Run Wasmtime with the debug info enabled; this is `-g` from the CLI and 14 `Config::debug_info(true)` in an embedding (e.g. see [debugging in a Rust 15 embedding](./examples-rust-debugging.md)) 16 173. Use a supported debugger: 18 19 ```sh 20 lldb -- wasmtime run -g foo.wasm 21 ``` 22 ```sh 23 gdb --args wasmtime run -g foo.wasm 24 ``` 25 26If you run into trouble, the following discussions might help: 27 28- On MacOS with LLDB you may need to run: `settings set 29 plugin.jit-loader.gdb.enable on` 30 ([#1953](https://github.com/bytecodealliance/wasmtime/issues/1953)) 31- With LLDB, call `__vmctx.set()` to set the current context before calling any 32 dereference operators 33 ([#1482](https://github.com/bytecodealliance/wasmtime/issues/1482)): 34 ```sh 35 (lldb) p __vmctx->set() 36 (lldb) p *foo 37 ``` 38- The address of the start of instance memory can be found in `__vmctx->memory` 39