Skip to content

Lab: Traps

x86 和 RISC-V 都是小端序()

调试

make qemu-gdb

# 实验指导书上说, 调试的时候指定一个CPU运行会更好一些
make CPUS=1 qemu-gdb

gdb-multiarch kernel/kernel

# (gdb) 进入gdb后执行
set confirm off
set architecture riscv:rv64
set riscv use-compressed-breakpoints yes
target remote localhost:25000

或 
riscv64-linux-gnu-gdb kernel/kernel


target remote localhost:25000

如果不想每次都输入这4行命令的话,可以在~/.gdbinit文件里添加如下命令

set auto-load safe-path /
set confirm off
set architecture riscv:rv64
set riscv use-compressed-breakpoints yes
target remote localhost:25000

如果要调试用户态下的程序,需要

file user/_call

gdb常用指令

b # 打断点 (e.g.     b main | b *0x30)
c # continue

layout split # view src-code & asm-code

ni # 单步执行汇编(不进函数)
si # 单步执行汇编(有函数则进入函数)
n # 单步执行源码
s # 单步执行源码

p # print
p $a0 # 打印a0寄存器的值
p/x 1536 # 以16进制的格式打印1536
i r a0 # info registers a0
x/i 0x630 # 查看0x630地址处的指令
x/g 0x80000000 # 查看0x80000000地址处的值(g表示值的长度有64位)