使用 gdb debug xv6
make CPUS=1 qemu-gdb启动qemu,打开 gdb-server,可以看到这里server的端口号是25501
- 另起terminal
/opt/homebrew/bin/riscv64-elf-gdb打开 gdb-client target remote 127.0.0.1:25501与 server 建立连接b _entry设置入口断点c跳转到入口处,可以发现代码没有停在0x8000000,而是停在0x8000000a,kernel/kernel.sam里可以看到8000000a: f14025f3 csrr a1,mhartid读取了系统寄存器mhartid并将结果加载到了a1寄存器中。0x8000000是被qemu认可的地址,使用qemu的时候第一个指令地址必须是这个特定地址。kernel/kernel.ld里可以看到是从这个地址开始读
si执行下一条指令b main在main.c 打点layout split分割视图
nnextpprintsstep intodel 3删除断点3
参考:
https://ftp.gnu.org/old-gnu/Manuals/gdb/html_node/gdb_130.html
layout:https://ftp.gnu.org/old-gnu/Manuals/gdb/html_chapter/gdb_19.html
https://www.bilibili.com/video/BV1rS4y1n7y1/?p=2&vd_source=fcca71b554b349a93525c9acd148c2cf