经过无数次尝试和重装,耗时近40个小时,终于探索出一条用vscode调试xv6的可行性道路
1.重装虚拟机
按照上一个说明的流程,安装一个新的虚拟机并记住它的名字。
换阿里源(这一步不知是否有实际意义)https://zhuanlan.zhihu.com/p/61228593
更新
$sudo apt update
$sudo apt upgrade
下载必要组件并解压
$sudo apt install git build-essential gdb-multiarch qemu-system-misc gcc-riscv64-linux-gnu binutils-riscv64-linux-gnu libglib2.0-dev libpixman-1-dev gcc-riscv64-unknown-elf
$wget https://download.qemu.org/qemu-5.1.0.tar.xz
$tar xvf qemu-5.1.0.tar.xz
$cd qemu-5.1.0
$./configure --disable-kvm --disable-werror --prefix=/usr/local --target-list="riscv64-softmmu"
(若最后一步报错则去知乎看6.s081踩坑之旅)
编译,克隆源代码并初始运行
$make
$sudo make install
$git clone git://g.csail.mit.edu/xv6-labs-2020
$cd xv6-labs-2020
$git checkout util
$make qemu
2. vscode远程调试
在vscode上安装remote ssh一系列插件
在虚拟机终端输入ifconfig(如果报错就按它的指示去做)并获得地址名
在vscode中的ssh配置文件中加入以下东西:(或者修改)
Host 造一个名字
HostName 输入你得到的地址
User 用户名
在你的windows终端中跑一遍ssh检验是否能够连接虚拟机
ssh 用户名@虚拟机地址
如果无报错正常进行,如果有报错则检查虚拟机是否安装了支持ssh的远程组件(自行百度)
https://zhuanlan.zhihu.com/p/555214972
在vscode中远程连接虚拟机并输入两次密码
用vscode打开xv6-labs-2020文件目录并在目录下创建一个.vscode文件夹
在vscode远程ssh上下载c/c++debug组件
点击调试并根据指示生成tasks, launch文件
修改launch文件:
{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) 启动",
"type": "cppdbg",
"request": "launch",
"program": "/home/genesis/xv6-labs-2020/kernel/kernel",//你的kernel所在的目录
"args": [],//可以后续传参
"stopAtEntry": true,//支持断点调试
"cwd": "${fileDirname}",
"miDebuggerServerAddress": "localhost:26000",//这是默认端口
"miDebuggerPath": "/usr/bin/gdb-multiarch",//x86环境支持组件
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"logging":{
"engineLogging":true,
"programOutput": true,
}
}
]
}
修改gdbinit.teml.riscv:(最后一句支持更广泛的断点调试)
set confirm off
set architecture riscv:rv64
target remote 127.0.0.1:1234
symbol-file kernel/kernel
set disassemble-next-line auto
set riscv use-compressed-breakpoints yes
在vscode终端启动qemu:
$make qemu-gdb
注释gdbinit文件(每次启动qemu都要修改,可以尝试优化):
set confirm off
set architecture riscv:rv64
#target remote 127.0.0.1:26000
symbol-file kernel/kernel
set disassemble-next-line auto
set riscv use-compressed-breakpoints yes
按下f5并祈祷
参考:bilibili Deniffer up主的视频与课程网站
3.打分
如果make grade失败并报错‘python’: No such file or directory,可以进行如下操作
查看已安装的python版本
python3 --version
查找python3的位置
whereis python3
为其创建连接符号
sudo ln -s /usr/bin/python3 /usr/bin/python