-
Notifications
You must be signed in to change notification settings - Fork 76
QEMU User with GDB
Avimitin Lu edited this page Mar 16, 2023
·
1 revision
在 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
调试了。