更详细内容请参考:https://www.bilibili.com/video/BV1fy4y1b7TC?p=24&t=404
或关注作者的公众号:VSCode
vscode调试g++工程
有两种调试方式,推荐使用第二种。
1、使用终端生成好的.exe文件
1、调试的话需要文件夹下生成带有调试信息的可执行文件,在终端使用如下命令
g++ -g .\main.cpp .\swap.cpp -o mymutilswap
其中-g代表生成带有调试信息的.exe文件
2、点击调试按钮
生成launch.json文件。
- 下面对launch.json文件进行解释
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "g++.exe - 生成和调试活动文件",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}\\${fileBasenameNoExtension}.exe", // 可执行文件名,这个文件必须是已经存在的(可以使用Task.json中生成)
"args": [], // 调试参数
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false, // 调试的时候打印在哪,默认为false。调试控制台
"MIMode": "gdb",
"miDebuggerPath": "C:\\Strawberry\\c\\bin\\gdb.exe",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
// "preLaunchTask": "C/C++: g++.exe build active file" // 开始调试之前的工作 ,这里的名称对应于Task.json里面的label
}
]
}
如果是使用的命令行生成好的.exe文件,只需要注意这条命令和.exe文件名是否匹配
"program": "${fileDirname}\\${fileBasenameNoExtension}.exe", // 可执行文件名,这个文件必须是已经存在的(可以使用Task.json中生成)
然后点击F5,就可以开始调试了。
2、使用task.json调试
先使用命令行生成带有调试信息的.exe文件,难免有些不方便,特别是针对频繁修改源代码的情况。
因此推荐使用task.json来生成.exe文件
说白了,就是使用task.json将上述的终端命令包含进去。对于修改的代码,可以直接调试,vscode会根据launch.json调用task.json,自动生成.exe文件。
- 下面介绍task.json的配置
{
"tasks": [
{
"type": "shell",
"label": "C/C++: g++.exe build active file", // 这个Task的名称
"command": "C:\\Strawberry\\c\\bin\\g++.exe",
"args": [
"-g", // 带有调试信息
"${file}", // 源文件
"swap.cpp",
"-o", // 输出文件名
"${fileDirname}\\${fileBasenameNoExtension}.exe" // 生成的可执行文件
],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
}
}
],
"version": "2.0.0"
}
我们将所需的命令行放在"arg"里面:
"args": [
"-g", // 带有调试信息
"${file}", // 源文件
"swap.cpp",
"-o", // 输出文件名
"${fileDirname}\\${fileBasenameNoExtension}.exe" // 生成的可执行文件
保证
1、最终生成的文件和launch.json中生成的文件是同一个。
2、task.json的"label"和launch.json中的"preLaunchTask"是一个即可。
vscode调试cmake工程
使用cmake进行构建cpp工程,主要分为一下几步:
1、编写CMakeList.txt
project(my_cmake_swap)
add_executable(${PROJECT_NAME} main.cpp swap.cpp)
2、按下F1,配置cmake
生成build文件夹
3、编写launch.json文件
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "g++.exe - 生成和调试活动文件",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}\\build\\my_cmake_swap.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "C:\\Program Files\\mingw64\\bin\\gdb.exe",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
// "preLaunchTask": "C/C++: g++.exe build active file"
"preLaunchTask": "Build"
}
]
}
4、编写task.json文件
{
"version": "2.0.0",
"options": {
"cwd": "${fileDirname}/build",
"type": "shell"
},
"tasks": [
{
"type": "shell",
"label": "C/C++: g++.exe build active file",
"command": "C:\\Program Files\\mingw64\\bin\\g++.exe",
"args": [
"-g",
"${file}",
"swap.cpp",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": "build",
"detail": "compiler: \"C:\\Program Files\\mingw64\\bin\\g++.exe\""
},
{
// "type": "shell",
"label": "cmake",
"command": "cmake",
"args": [
".."
]
},
{
// "type": "shell",
"label": "make",
"command":"mingw32-make.exe",
"args": []
},
{
"label": "Build",
"dependsOn":[
"cmake",
"make"
]
}
]
}
其中
"options": {
"cwd": "${fileDirname}/build", // 代表进入目录
"type": "shell" // task的任务类型,"shell"代表在终端执行
},
调试结果