Skip to content
Avimitin Lu edited this page Mar 16, 2023 · 1 revision

在 qemu-user 中使用 gdb

在 qemu user 里会因为 Function unimplemented 起不来 gdb,但 qemu user 其实支持一个 -g 参数来起 gdb server https://www.qemu.org/docs/master/user/main.html#linux-user-space-emulator,于是可以在宿主机上使用 gdb-multiarch 或者 riscv64 gdb 连上 qemu user 的 gdb server 来 debug。

依赖

  • pacman -S riscv64-linux-gnu-gdb

步骤

假如是在打包的过程中 debug,那么需要用 -L 给 qemu user 传入一个 riscv64 elf interpreter 的 path prefix。然后再用 -g 设定 gdb server 的端口号,再最后面跟上需要 debug 的 riscv 程序:

# example
qemu-riscv64-static -L /var/lib/archbuild/extra-riscv64/<builduser> -g 6676 program [argument...]

然后他会等待宿主机的 gdb 连接。再开一个 terminal,启动 riscv64-linux-gnu-gdb,输入 target remote localhost:6676 连接 qemu user 的 gdb server,然后输入 set sysroot /var/lib/archbuild/extra-riscv64/<builduser> 让 gdb 正确的找到 debug info。接下来输入 file <program> 让 gdb 读取 symbol 信息,最后就可以打断点 breakpoint 然后 continue 调试了。

Clone this wiki locally