Vscode配置调试文件及其参数含义的笔记,这里以Linux下的C/C++调试环境为例进行说明

一、调试文件的配置

vscode中,通过配置launch.json文件进行调试。在侧边栏的调试(像虫子一样)中,如果没有配置就会显示如下类似的界面:

这时可以直接点击运行和调试,也可以点击**创建 launch.json 文件**,然后会提示选择调试环境,Linux类系统选择C++(GDB/LLDB)Windows系统选择C++(Windows),选择C++(GDB/LLDB)后,会提示选择配置(若没有这一步则会直接生成一个空的launch.json),此时选择gcc - 生成和调试活动文件,就会在项目根目录的.vscode内创建launch.jsontask.json共两个文件;

个人理解是:launch,json文件是用来配置目标程序调试相关的参数,task.json是用来指定某个task如何编译当前的项目。

1.launch.json内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
"version": "0.2.0",
"configurations": [
{
"name": "gcc - 生成和调试活动文件",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "lldb",
"preLaunchTask": "C/C++: gcc 生成活动文件"
}
]
}
  • name:配置的名字,可以存在不同配置,一般是一个调试目标有一个配置(显示在调试侧边栏上下拉选择列表中);
  • type:表明调试器的类型,使用Visual Studio Windows Debuger的时候必须是cppvsdbg;使用GDB或者LLDB时为cppdbg
  • request:表明是执行(launch)目标程序,还是连接(attach)已有的实例;
  • program:表明调试的目标程序;
  • args:执行目标参数需要的参数,格式为json列表;
  • cwd:目标程序执行的工作目录;
  • MIMode:表明使用的调试器,gdb或者是lldb
  • preLaunchTask:就是在开始调试前需要执行的任务,定义在task.json文件中,一般用来定义编译任务,生成目标程序。

2.task.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
{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: gcc 生成活动文件",
"command": "/usr/bin/gcc",
"args": [
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "调试器生成的任务。"
}
],
"version": "2.0.0"
}

这里其实就是执行指定args参数的command,其作用是编译当前的活动文件。 其中label字段定义的就是一个task的名字,在launch.json中通过preLaunchTask字段指明task的名字就可以了。

  • type:表明task的类型;
  • options:就是一些其他可选的设置;
  • group:是该task的组别,可以通过命令面板执行同一个组别的多个task

一般情况下,编译采用编译脚本进行自动编译,比如在项目根目录的build.sh采用cmakemake的方式自动编译生成目标程序,此时可以新增一个如下的task

1
2
3
4
5
6
7
8
9
10
11
12
{
"type": "shell",
"label": "Build All Targets",
"command": "bash",
"args": [
"./build.sh"
],
"options": {
"cwd": "${workspaceFolder}"
},
"detail": "自动编译生成目标程序"
}

注意type指定成了shell,如果你的脚本是可以直接执行的,那么command也可以直接写成./build.sh;此时,command也可以是任何在shell中能够使用的命令。

综上:Vscode的配置文件中,launch.json指明要调试的目标、需要的参数和工作目录;task.json中指明具体编译实现的方式。

参考文章:

vscode实战:代码调试
Debugging