wasm-micro-runtime/doc/source_debugging_aot.md
YAMAMOTO Takashi 5edd85d055
doc: Separate source_debugging.md into two files (#2932)
The original file was confusing as it contains both of
interpreter and aot debugging information intermixed.
2023-12-27 15:51:51 +08:00

3.2 KiB

WAMR source debugging (AOT)

Debugging with AOT

Note: AOT debugging is experimental and only a few debugging capabilities are supported.

  1. Build lldb (assume you have already built llvm)
cd ${WAMR_ROOT}/core/deps/llvm/build
cmake ../llvm -DLLVM_ENABLE_PROJECTS="clang;lldb" -DLLDB_INCLUDE_TESTS=OFF
make -j $(nproc)
  1. Build wamrc with debugging feature
cd ${WAMR_ROOT}/wamr-compiler
mkdir build && cd build
cmake .. -DWAMR_BUILD_DEBUG_AOT=1
make -j $(nproc)
  1. Build iwasm with debugging feature
cd ${WAMR_ROOT}/product-mini/platforms/linux
mkdir build && cd build
cmake .. -DWAMR_BUILD_DEBUG_AOT=1
make
  1. Compile wasm module to AOT module
wamrc -o test.aot test.wasm
  1. Execute iwasm using lldb

    Then you can use lldb commands to debug both wamr runtime and your wasm application in current terminal.

    % lldb iwasm -- test.aot
    (lldb) target create "iwasm"
    Current executable set to 'iwasm' (x86_64).
    (lldb) settings set -- target.run-args  "test.aot"
    (lldb) settings set plugin.jit-loader.gdb.enable on
    (lldb) b main
    Breakpoint 1: where = iwasm`main + 48 at main.c:294:11, address = 0x0000000100001020
    (lldb) run
    Process 27954 launched: '/tmp/bin/iwasm' (x86_64)
    Process 27954 stopped
    * thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
        frame #0: 0x0000000100001020 iwasm`main(argc=2, argv=0x00007ff7bfeff678) at main.c:294:11
       291  int
       292  main(int argc, char *argv[])
       293  {
    -> 294      int32 ret = -1;
       295      char *wasm_file = NULL;
       296      const char *func_name = NULL;
       297      uint8 *wasm_file_buf = NULL;
    Target 0: (iwasm) stopped.
    (lldb) c
    Process 27954 resuming
    1 location added to breakpoint 1
    error: need to add support for DW_TAG_base_type 'void' encoded with DW_ATE = 0x0, bit_size = 0
    Process 27954 stopped
    * thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.2
        frame #0: 0x00000001002980a0 JIT(0x100298004)`main(exenv=0x0000000301808200) at hello.c:6:9
       3    int
       4    main(void)
       5    {
    -> 6            printf("hello\n");
       7
       8            return 0;
       9    }
    Target 0: (iwasm) stopped.
    (lldb) br l
    Current breakpoints:
    1: name = 'main', locations = 2, resolved = 2, hit count = 2
      1.1: where = iwasm`main + 48 at main.c:294:11, address = 0x0000000100001020, resolved, hit count = 1
      1.2: where = JIT(0x100298004)`main + 12 at hello.c:6:9, address = 0x00000001002980a0, resolved, hit count = 1
    
    (lldb)