在做MIT6.S081实验的时候我们可能会用到gdb来调试程序。那么具体方法是什么呢?
首先根据官方指南配置好MIT6.S081,具体可见:MIT6.S081实验环境搭建
配置好环境后,
在命令行中输入命令:
sudo make qemu-gdb
应该会出现
另开一个终端,输入命令
gdb-multiarch
应该会出现
没出现也没关系,如果提示没有gdb-multiarch,使用命令安装就行
sudo apt-get install gdb-multiarch
如果启动gdb-multiarch的提示信息没有
The target architecture is assumed to be riscv:rv64
那么(每次)启动后需要输入
set architecture riscv:rv64
在上面我们输入了sudo make qemu-gdb之后,出现的信息里面有
这个就是我们要连接的端口,根据这个端口,在gdb-multiarch中输入
target remote localhost:25000
会出现
这个时候就连接上了
使用命令
file user/_xxx
来加载可执行文件,例如 file user/_sleep(注意有下划线)
这个时候可以开始打断点了,例如
b main
然后多次输入c继续执行
输入到原来的终端应该会有变化
在这里就要输入我们程序的参数了,第一个参数是程序的名字,后面的参数视具体情况而定,例如sleep应该有一个表示多少时间的参数:
此后就可以继续调试了
总之gdb-multiarch的调试方法和gdb类似。
每次调试都要设置riscv:rv64和端口比较麻烦,可以将这两个步骤直接写到配置文件中,步骤为首先用nano ~/.gdbinit
打开配置文件,然后把set architecture riscv:rv64
和target remote localhost:25000
写入到配置文件中,如下:
然后按下Ctrl+O,再按下enter键保存。按下Ctrl+X退出即可。此时再次运行gdb-multiarch
就可以直接调试了