2.7 KiB
WAMR source debugging
WAMR supports source level debugging based on DWARF (normally used in C/C++/Rust), source map (normally used in AssemblyScript) is not supported.
Build wasm application with debug information
To debug your application, you need to compile them with debug information. You can use -g
option when compiling the source code if you are using wasi-sdk (also work for emcc and rustc):
/opt/wasi-sdk/bin/clang -g test.c -o test.wasm
Then you will get test.wasm
which is a WebAssembly module with embedded DWARF sections. Further, you can use llvm-dwarfdump
to check if the generated wasm file contains DWARF information:
llvm-dwarfdump-12 test.wasm
Debugging with interpreter
- Install dependent libraries
apt update && apt install cmake make g++ libxml2-dev -y
- Build iwasm with source debugging feature
cd ${WAMR_ROOT}/product-mini/platforms/linux
mkdir build && cd build
cmake .. -DWAMR_BUILD_DEBUG_INTERP=1
make
- Execute iwasm with debug engine enabled
iwasm -g=127.0.0.1:1234 test.wasm
# Use port = 0 to allow a random assigned debug port
- Build customized lldb (assume you have already cloned llvm)
cd ${WAMR_ROOT}/core/deps/llvm
git apply ../../../build-scripts/lldb-wasm.patch
mkdir build-lldb && cd build-lldb
cmake -DCMAKE_BUILD_TYPE:STRING="Release" -DLLVM_ENABLE_PROJECTS="clang;lldb" -DLLVM_TARGETS_TO_BUILD:STRING="X86;WebAssembly" -DLLVM_ENABLE_LIBXML2:BOOL=ON ../llvm
make -j $(nproc)
- Launch customized lldb and connect to iwasm
lldb
(lldb) process connect -p wasm connect://127.0.0.1:1234
Then you can use lldb commands to debug your applications. Please refer to lldb document for command usage.
Known issue:
step over
on some function may be treated asstep in
, it will be fixed later.
Debugging with AoT
Note: AoT debugging is experimental and only a few debugging capabilities are supported.
- Build lldb (assume you have already built llvm)
cd ${WAMR_ROOT}/core/deps/llvm/build
cmake . -DLLVM_ENABLE_PROJECTS="clang;lldb"
make -j $(nproc)
- Build wamrc with debugging feature
cd ${WAMR_ROOT}/wamr-compiler
mkdir build && cd build
cmake .. -DWAMR_BUILD_DEBUG_AOT=1
make -j $(nproc)
- Build iwasm with debugging feature
cd ${WAMR_ROOT}/product-mini/platforms/linux
mkdir build && cd build
cmake .. -DWAMR_BUILD_DEBUG_AOT=1
make
- Compile wasm module to AoT module
wamrc -o test.aot test.wasm
- Execute iwasm using lldb
lldb-12 iwasm -- test.aot
Then you can use lldb commands to debug both wamr runtime and your wasm application in current terminal