15c1557d2SNick Fitzgerald# Debugging with `gdb` and `lldb` 25c1557d2SNick Fitzgerald 35c1557d2SNick FitzgeraldThe following steps describe how to use `gdb` or `lldb` to debug both the Wasm 45c1557d2SNick Fitzgeraldguest and the host (i.e. the Wasmtime CLI or your Wasmtime-embedding program) at 55c1557d2SNick Fitzgeraldthe same time: 65c1557d2SNick Fitzgerald 75c1557d2SNick Fitzgerald1. Compile your WebAssembly with debug info enabled, usually `-g`; for 85c1557d2SNick Fitzgerald example: 95c1557d2SNick Fitzgerald 1092cfda1bSVictor Adossi ```console 115c1557d2SNick Fitzgerald clang foo.c -g -o foo.wasm 125c1557d2SNick Fitzgerald ``` 135c1557d2SNick Fitzgerald 145c1557d2SNick Fitzgerald2. Run Wasmtime with the debug info enabled; this is `-D debug-info` from the 155c1557d2SNick Fitzgerald CLI and `Config::debug_info(true)` in an embedding (e.g. see [debugging in a 16*ac3358b1SChris Fallin Rust embedding](./examples-debugging.md)). It's also recommended to use 1796c905a6SAlex Crichton `-O opt-level=0` for better inspection of local variables if desired. 185c1557d2SNick Fitzgerald 195c1557d2SNick Fitzgerald3. Use a supported debugger: 205c1557d2SNick Fitzgerald 2192cfda1bSVictor Adossi ```console 225c1557d2SNick Fitzgerald lldb -- wasmtime run -D debug-info foo.wasm 235c1557d2SNick Fitzgerald ``` 2492cfda1bSVictor Adossi ```console 2596c905a6SAlex Crichton gdb --args wasmtime run -D debug-info -O opt-level=0 foo.wasm 265c1557d2SNick Fitzgerald ``` 275c1557d2SNick Fitzgerald 285c1557d2SNick FitzgeraldIf you run into trouble, the following discussions might help: 295c1557d2SNick Fitzgerald 305c1557d2SNick Fitzgerald- On MacOS with LLDB you may need to run: `settings set 315c1557d2SNick Fitzgerald plugin.jit-loader.gdb.enable on` 325c1557d2SNick Fitzgerald ([#1953](https://github.com/bytecodealliance/wasmtime/issues/1953)) 335c1557d2SNick Fitzgerald 345c1557d2SNick Fitzgerald- With LLDB, call `__vmctx.set()` to set the current context before calling any 355c1557d2SNick Fitzgerald dereference operators 365c1557d2SNick Fitzgerald ([#1482](https://github.com/bytecodealliance/wasmtime/issues/1482)): 3792cfda1bSVictor Adossi ```text 385c1557d2SNick Fitzgerald (lldb) p __vmctx->set() 395c1557d2SNick Fitzgerald (lldb) p *foo 405c1557d2SNick Fitzgerald ``` 415c1557d2SNick Fitzgerald 425c1557d2SNick Fitzgerald- The address of the start of instance memory can be found in `__vmctx->memory` 435c1557d2SNick Fitzgerald 445c1557d2SNick Fitzgerald- On Windows you may experience degraded WASM compilation throughput due to the 455c1557d2SNick Fitzgerald enablement of additional native heap checks when under the debugger by default. 465c1557d2SNick Fitzgerald You can set the environment variable `_NO_DEBUG_HEAP` to `1` to disable them. 47