近来使用VScode+CMake 调试C/C++,看了很多文章教程和小视频。总终于看懂点眉目,记录下一下。
tasks.json
{
"tasks": [
{
"label": "Build", //任务的名字叫Build,注意是大小写区分的,launch中调用任务名
"dependsOrder": "sequence", // 按列出的顺序执行任务依赖项
"dependsOn": [
"g++", //任务名称
"make" //任务名称
] //顺序执行任务
},
{
"label": "g++",
"type": "shell", //指定任务类型为shell命令
"command": "g++", //具体的shell命令
"args": [
"-g",
"${workspaceFolder}/src/Test.cpp",
"${workspaceFolder}/src/cJSON.c",
"-I./include",
"-ldl",
"-o",
"Test"
], //调用此任务时传递给命令的参数,在我这里 总的命令就是g++ -g /mnt/c/WSLU/WHH/src/Test.cpp /mnt/c/WSLU/WHH/src/cJSON.c -I./include -ldl -o Test
//${workspaceFolder}是/mnt/c/WSLU/WHH,当前工作路径:当前文件所在的工作空间
"options": {
"cwd": "${workspaceFolder}" //指定命令执行所在路径,${workspaceFolder}当前文件所在的工作空间
},
"group": {
"kind": "build",
"isDefault": true
// 任务分组
// 在build组的任务们,可以通过在Command Palette(F1) 输入run build task来运行,运行会执行是build组的命令
//是执行一次运行调试后,才有这个任务组配置可选(才能通过在Command Palette(F1) 输入run build task来运行)
// 当然,如果任务分组是test,你就可以用run test task来运行
//官方解释 group:控制是否使用拆分窗格在特定的终端组中执行任务。同一组中的任务(由字符串值指定)将使用拆分终端显示而不是新的终端面板。
},
"problemMatcher": [
"$gcc" // 使用gcc捕获错误
]
},
{
"label": "make",
"type": "shell",
"options": {
"cwd": "${workspaceFolder}/Air/build"
}, //指定命令执行所在路径
"command": "make",
"args": [],
"group": {
"kind": "build",
"isDefault": true
// 任务分组
// 在build组的任务们,可以通过在Command Palette(F1) 输入run build task来运行,运行会执行是build组的命令
//是执行一次运行调试后,才有这个任务组配置可选(才能通过在Command Palette(F1) 输入run build task来运行)
// 当然,如果任务分组是test,你就可以用run test task来运行
//官方解释 group:控制是否使用拆分窗格在特定的终端组中执行任务。同一组中的任务(由字符串值指定)将使用拆分终端显示而不是新的终端面板。
},
}
],
"version": "2.0.0"
}
lanuch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "g++ - 生成和调试活动文件",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/Test", //执行程序的路径+执行程序
"args": [],
"stopAtEntry": false, // 选为true则会在打开控制台后停滞,暂时不执行程序
"cwd": "${workspaceFolder}", // 当前工作路径:当前文件所在的工作空间
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "Build", //在launch之前运行的任务名,这个名字一定要跟tasks.json中的任务名字大小写一致
"miDebuggerPath": "/usr/bin/gdb"
}
]
}