vscode调试mit6s081Lab

环境

  • mit6.s081的实验环境
  • gdb-multiarch(用于gdb调试,vscode调试实质上就是提供个图形化页面,底层还是这个)
// 安装 gdb-multiarch
sudo apt-get install gdb-multiarch

配置

首先终端输入make qemu-gdb,项目根目录产生一个.gdbinit文件。

image-20231203144927931

点开这个文件,然后记住画线的那个端口号,我这里是25000(你的可能不一样),然后删除画横线的这行

image-20231203145159081

vscode调试会用到个launch.json文件。

image-20231203145338636

launch.json文件配置如下:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "debug xv6",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/kernel/kernel",
            "args": [],
            "stopAtEntry": true,
            "cwd": "${workspaceFolder}",
            "miDebuggerServerAddress": "localhost:25000",
            "miDebuggerPath": "/usr/bin/gdb-multiarch",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "pretty printing",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "logging": {
                // "engineLogging": true,
                // "programOutput": true,
            }
        }
    ]
}

这个配置文件有两个需要改的地方。一个是miDebuggerServerAddress这一项需要把端口改为.gdbinit文件中的那个端口号。第二个是miDebuggerPath这里,要填成自己gdb-multiarc的位置(ubuntu应该默认就是这个位置)。

调试流程

  • 1、终端输入make qemu-gdb
  • 2、按F5进入调试,它会跳到kernel的main函数。

image-20231203150826935

  • 2、在调试控制台,输入-exec file user/_sleep(这里是个例子,表示切换到sleep.c的符号表),输出Reading symbols from user/_sleep表示成功了。前面加上-exec表示这个gdb命令。

    image-20231203150352939

  • 3、然后就可以在sleep.c文件中打断点了,断点是红色的表示打成功了。

image-20231203151029814

THE END