废话一箩筐:在VScode上配置GDB调试源码,网上的教程一大箩筐,本来不想写的。但是我自己在运行的时候,出现了在VScode上通过registers看寄存器值的时候,程序就会“崩溃”的情况。所以还是来记录一下。
Register

一、准备工作

按照我刚刚废话里的描述,我猜想可能是因为自己本地的GDB版本太旧,所以准备更新一下版本,后面看来也确实是这个问题。
我本地的环境如下:
Ubuntu 20.04 + VS Code + GDB 9.2 (咱们需要把版本更新到更新的,我选择了gdb-15.2)
执行以下命令安装gdb-15.2。

# 安装依赖项
sudo apt install libgmp-dev libmpfr-dev
# 从网站上下载对应版本的源码
wget http://ftp.gnu.org/gnu/gdb/gdb-15.2.tar.gz
# 开始编译安装
tar -xzvf gdb-15.2.tar.gz
cd gdb-15.2
# 请注意,要加上--enable-targets=all参数,不然只能编译出gdb,不能编译出gdb-multiarch
./configure --prefix=/usr/local/gdb-15.2 --with-python --enable-targets=all
make -j8
sudo make install

编译安装成功后,我们来检查一下生成物和gdb版本信息:
版本信息

二、在VS Code中使用GDB调试

Step1:按照如下内容配置.vscode/launch.json文件

{
  "version": "0.2.0",
  "configurations": [
      {
          "name": "Debug xv6-kernel",
          "type": "cppdbg",
          "request": "launch",
          "program": "${fileDirname}/../kernel/kernel",
          "miDebuggerPath": "/usr/local/gdb-15.2/bin/gdb",
          "miDebuggerServerAddress": "localhost:26000",
          "args": [],
          "stopAtEntry": true,
          "cwd": "${fileDirname}",
          "environment": [],
          "externalConsole": false,
          "MIMode": "gdb",
          "setupCommands": [
              {
                  "description": "Enable pretty-printing for gdb",
                  "text": "-enable-pretty-printing",
                  "ignoreFailures": true
              },
              {
                  "description": "Set architecture to RISC-V",
                  "text": "set architecture riscv",
                  "ignoreFailures": false
              }
          ],
          "logging": {
            "engineLogging": false
            }
      }
  ]
}

Step2:到自己xv6-riscv的路径下,执行以下命令

$ make qemu-gdb 
*** Now run 'gdb' in another window.
qemu-system-riscv64 -machine virt -bios none -kernel kernel/kernel -m 128M -smp 1 -nographic -global virtio-mmio.force-legacy=false -drive file=fs.img,if=none,format=raw,id=x0 -device virtio-blk-device,drive=x0,bus=virtio-mmio-bus.0 -S -gdb tcp::26000

执行以上命令后,终端就停住了,等待gdb的连接。
Step3:VS code中,到[Run and Debug]面板,点击调试按钮,或者直接按F5。开始进行调试。
开启调试
启动后,代码就停留在了代码入口处,自己可以添加断点啦,并且这时我们也能从面板中直接看到寄存器值啦。
可以看到寄存器值了完结撒花!✿✿ヽ(°▽°)ノ✿

希望能帮到看到这篇笔记的YOU,祝开心~~

更多推荐