很久之前跌跌撞撞用VSCode调试过C/C++,但是没有系统记录下步骤,今天腾出空来整理分享一下。
本教程对wsl、linux虚拟机、linux物理机均适用
基本步骤
-
在 VSCode 中安装叫做
C/C++
的插件,这个插件包含了debug、代码格式化等一系列功能 -
必做:调试功能的配置
- 在工作目录下建立
.vscode
文件夹
(在某些情况下vscode会自动建立此文件夹,也会自动生成调试配置,但自动生成的一般不能用…) - 在.vscode下建立task.json和launch.json,然后将我列在本文最后的代码复制粘贴进去
- 在工作目录下建立
-
在vscode调试选项课选择相应配置项,然后调试就行
可以直接使用的配置文件
这里列出常用的配置,使用时复制粘贴一下就好了
- 使用makefile,可用于调试固定编译流程的项目
- 直接调试当前文件,可用于运行一些临时编写的小程序
使用makefile
launch.json 用于启动程序并进入gdb
{
"version": "0.2.0",
"configurations": [
{
"name": "make", //这是在vscode调试选项卡里显示的配置名称
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/main", //这里填写make生成的文件路径
"args": [],
"stopAtEntry": true,
"cwd": "${workspaceFolder}",
"MIMode": "gdb",
"preLaunchTask": "make", //这里调用task.json里叫做make的任务,详见task.json
"miDebuggerPath": "/usr/bin/gdb"
}
]
}
task.json 在调试前进行编译等工作,如调用make。
{
"version": "2.0.0",
"tasks": [
{
"label": "make", //这里是任务名,需要在launch.json中被调用
"command": "make", //这里是需要运行的命令,传参在下面一行进行
//不能在这一行直接传参,也就是不能写"command": "make all"
//注意自己写的make中gcc要加-g生成调试信息,否则无法调试
"args": ["all"] //这里是给上面一行的命令传入的参数
}
]
}
直接编译并调试当前打开的文件
launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "gcc build and debug active file",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}",
"args": [],
"stopAtEntry": true,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"preLaunchTask": "gcc build active file",
"miDebuggerPath": "/usr/bin/gdb"
}
]
}
task.json
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "gcc build active file",
"command": "/usr/bin/gcc",
"args": [//这是给gcc传入的一系列参数,在终端怎样用gcc,这里就要怎样写
"-g", //要给gdb生成调试信息,不然vscode下的断点不管用
"${file}", //代表当前打开的文件
"-o", //代表直接生成可执行文件,用过gcc的都知道
"${fileDirname}/${fileBasenameNoExtension}", //自定义生成的文件名,默认是源代码名称去掉扩展名
// "-lpthread" //我自己写代码要用到pthread库
],
"options": {
"cwd": "/usr/bin"
}
}
]
}