接着我们尝试一下F5,开始调试,结果可以看到报了一个缺少build文件的错误。原因是我们还没执行make编译出可执行文件呢。我们在launch.json文件中,添加一个preLaunchTask的节点,并设置值为“build”。注意这里的build不是指可执行文件build,而是一个名为build的任务!
1 {
2 "version": "0.2.0",
3 "configurations": [
4 {
5 "name": "C++ Launch",
6 "type": "cppdbg",
7 "request": "launch",
8 "program": "${workspaceRoot}/build",
9 "args": [],
10 "stopAtEntry": false,
11 "cwd": "${workspaceRoot}",
12 "environment": [],
13 "externalConsole": true,
14 "preLaunchTask": "build",
15 "linux": {
16 "MIMode": "gdb"
17 },
18 "osx": {
19 "MIMode": "lldb"
20 },
21 "windows": {
22 "MIMode": "gdb"
23 }
24 },
25 {
26 "name": "C++ Attach",
27 "type": "cppdbg",
28 "request": "attach",
29 "program": "${workspaceRoot}/build",
30 "processId": "${command.pickProcess}",
31 "linux": {
32 "MIMode": "gdb"
33 },
34 "osx": {
35 "MIMode": "lldb"
36 },
37 "windows": {
38 "MIMode": "gdb"
39 }
40 }
41 ]
42 }
再尝试F5,会提示一个信息:

点击配置任务运行程序,并选择Others, 会自动生成一个tasks.json文件,这个文件的作用就是告诉launch或者编译器需要执行什么操作。显然我们这里要执行make命令,修改tasks.json为如下:
1 {
2 "version": "0.1.0",
3 "command": "make",
4 "showOutput": "always",
5 "tasks": [
6 {
7 "taskName": "clean"
8 },
9 {
10 "taskName": "build",
11 "problemMatcher": {
12 "owner": "cpp",
13 "fileLocation": ["relative", "${workspaceRoot}"],
14 "pattern": {
15 "regexp": "^(.*):(d+):(d+):s+(warning|error):s+(.*)$",
16 "file": 1,
17 "line": 2,
18 "column": 3,
19 "severity": 4,
20 "message": 5
21 }
22 }
23 }
24 ]
25 }
其中tasks节点是一组任务,注意到其中一个名为build的任务,这就是launch.json文件中指定的preLaunchTask,表明在启动可执行程序之前,会先执行一下preLaunchTask即这里的build任务,重新make一下代码,更新可执行程序之后再启动。










