# 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`