Back
Please upgrade your browser or check your network connection.

在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

1sudo 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    // Use IntelliSense to learn about possible attributes.
 3    // Hover to view descriptions of existing attributes.
 4    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
 5    "version": "0.2.0",
 6    "configurations": [
 7        {
 8            "name": "(gdb) Launch",
 9            "type": "cppdbg",
10            "request": "launch",
11            "program": "${workspaceFolder}/a.out",
12            "args": [],
13            "stopAtEntry": false,
14            "cwd": "${workspaceFolder}",
15            "environment": [],
16            "externalConsole": false,
17            "MIMode": "gdb",
18            "preLaunchTask": "gcc build", //注意这里
19            "setupCommands": [
20                {
21                    "description": "Enable pretty-printing for gdb",
22                    "text": "-enable-pretty-printing",
23                    "ignoreFailures": true
24                }
25            ]
26        }
27    ]
28}

生成 task.json

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

生成task.json

选择others

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

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

现在我们把他改一改。

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

最终的tasks.json如下:

 1
 2{
 3    // See https://go.microsoft.com/fwlink/?LinkId=733558
 4    // for the documentation about the tasks.json format
 5    "version": "2.0.0",
 6    "tasks": [
 7        {
 8            "label": "gcc build",
 9            "type": "shell",
10            "command": "gcc",
11            "args": [
12                "-g",
13                "${file}",
14                "-o",
15                "a.out"
16            ]
17        }
18    ]
19}

其他问题

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

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,那么我们就给他下个。

文件的下载地址

1sudo su
2
3mkdir -p /build/glibc-LK5gWL/
4
5cd /build/glibc-LK5gWL/
6
7wget http://ftp.gnu.org/gnu/glibc/glibc-2.23.tar.gz
8
9tar zxvf glibc-2.23.tar.gz