在Ubuntu 16.04 上面使用VsCode来debug C

目标

要在Ubuntu 16.04上面的vscodedebug C,需要在vscode上面去配置launch.json以及task.json

C这种debug,我们当然是希望每次都重新编译出来新文件再来debug

所以我们的流程就是 编译 - debug


工具

编译 需要用到 gcc

debug 需要用到 gdb

所以可以使用apt安装上述包,建议顺带安装make

1
sudo apt install gcc make gdb

生成默认 launch.json

生成launch.json

在生成好的配置文件加入字段preLaunchTask,该字段设置是指,在执行当前文件内容的时候先运行一些任务。

这样子的话,就可以先让他编译,我们再来debug

1
"preLaunchTask": "",

我们给这个新的task的名称是gcc build

而且需要更改下program的值

1
"program": "enter program name, for example ${workspaceFolder}/a.out",

改成

1
"program": "${workspaceFolder}/a.out",

整个 launch.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
25
26
27
28
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/a.out",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"preLaunchTask": "gcc build", //注意这里
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}

生成 task.json

你的界面可能是英文,但是无所谓,中英文的意思都是一样的。

生成task.json

选择others

然后我们关注现在tasks.json的核心字段。

1
2
3
"label": "echo", //标签,该任务的名字
"type": "shell", //用什么来解析执行下面的那个command
"command": "echo Hello" //命令

现在我们把他改一改。

1
2
3
4
5
6
7
8
"label": "gcc build", //这里需要跟launch.json里面的preLaunchTask的值一致,不然无法调用到指定的task
"command": "gcc", //gcc 来编译
"args": [ //gcc的运行参数
"-g",
"${file}",
"-o",
"a.out"
]

最终的tasks.json如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "gcc build",
"type": "shell",
"command": "gcc",
"args": [
"-g",
"${file}",
"-o",
"a.out"
]
}
]
}

其他问题

你还可能会遇到类似以下的问题

glibcUbuntu16.04上面报错。

1
无法打开“ioputs.c”: 无法读取文件(Error: 找不到文件(vscode-remote://ssh-remote+xxxx/build/glibc-LK5gWL/glibc-2.23/libio/ioputs.c))。

提取问题的关键字段 — /build/glibc-LK5gWL/glibc-2.23/libio/ioputs.c

在这地方找不到glibc,那么我们就给他下个。

文件的下载地址

1
2
3
4
5
6
7
8
9
sudo su

mkdir -p /build/glibc-LK5gWL/

cd /build/glibc-LK5gWL/

wget http://ftp.gnu.org/gnu/glibc/glibc-2.23.tar.gz

tar zxvf glibc-2.23.tar.gz
0%