大家好,我叫徐锦桐,个人博客地址为www.xujintong.com,github地址为https://github.com/xjintong。平时记录一下学习计算机过程中获取的知识,还有日常折腾的经验,欢迎大家访问。
环境
- mit6.s081的实验环境
- gdb-multiarch(用于gdb调试,vscode调试实质上就是提供个图形化页面,底层还是这个)
// 安装 gdb-multiarch
sudo apt-get install gdb-multiarch
配置
首先终端输入make qemu-gdb
,项目根目录产生一个.gdbinit
文件。
点开这个文件,然后记住画线的那个端口号,我这里是25000(你的可能不一样),然后删除画横线的这行。
vscode调试会用到个launch.json
文件。
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函数。
-
2、在调试控制台,输入
-exec file user/_sleep
(这里是个例子,表示切换到sleep.c的符号表),输出Reading symbols from user/_sleep
表示成功了。前面加上-exec
表示这个gdb命令。 -
3、然后就可以在
sleep.c
文件中打断点了,断点是红色的表示打成功了。