0%

在Linux下使用VSCode调试uCore内核代码

概述

操作系统实验使用的是清华大学的uCore,而实验指导书使用的是命令行调试。由于内核是由C语言编写的,于是尝试使用VSCode调试内核代码。(调试boot还是得make debug

环境

Ubuntu 18.04,已根据指导书配置环境,并安装了VSCode

配置步骤

安装拓展

安装C/C++拓展
PS:建议安装语言包,搜索Chinese即可找到

修改Makefile

打开Makefile,搜索debug:,添加

1
2
debug-nogdb: $(UCOREIMG)
$(V)$(QEMU) -S -s -parallel stdio -hda $< -serial null

PS:其实就是去掉了gdb自动附加的命令,因为要使用VSCode启动的gdb去附加

修改配置文件

launch.json

使用VSCode打开LABX文件夹(如LAB1),然后按下F5,选择C++(GDB/LLDB),将跳转到launch.json文件
然后将

1
"program": "输入程序名称,例如 ${workspaceFolder}/a.out",

替换为

1
2
3
"miDebuggerServerAddress": "localhost:1234",
"program": "${workspaceFolder}/bin/kernel",
"preLaunchTask": "build-debug-nogdb",

tasks.json

.vscode文件夹下创建tasks.json文件,填入以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{
"version": "2.0.0",
"tasks": [
{
"label": "build-debug-nogdb",
"command": "make",
"args": [
"debug-nogdb"
],
"type": "shell",
"isBackground": true,
"problemMatcher": {
"pattern": {
"regexp": "."
},
"background": {
"activeOnStart": true,
"beginsPattern": ".",
"endsPattern": "."
},
},
}
]
}

PS:将.vscode文件夹复制到其他LAB下即可直接使用

下断点调试

在内核代码中下断点(如kern/init/init.c),然后按下F5即可进行调试
(如果调试时报错,并且是语法错误,选择仍要调试即可继续调试)

参考

ucore lab0 实验准备
使用 VSCode 运行 Task 并自动 Attach Debugger
How to make vscode not wait for finishing a preLaunchTask?