visual studio code 本质上是个编辑器,并不是IDE,因此需要自己配编译器。不过vscode会推荐一些官方插件,还是比较方便的。
vscode 需要改写 .vscode/launch.json 和 .vscode/tasks.json,前者描述调试工程环境,如何启动任务,后者定义编译方法
参考文章《在Linux中使用VS Code编译调试C++项目》
假定一个简单工程
/* solution.h */
class Solution {
public:
void Say();
};
/* solution.cpp */
#include
#include "solution.h"
void Solution::Say(){
std::cout << "HI!" << std::endl;
}
/* main.cpp */
#include "solution.h"
int main () {
Solution sln;
sln.Say();
return 0;
}
用vscode打开一个工程文件夹,然后 查看->调试(ctrl+shift+d)选择编译环境
图1. 选择C++(GDB/LLDB)
选择好后会自动生成一个launch.json文件,修改“program”和“preLaunchTask”即可
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/hello", // 修改输出程序路径
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": true,
"preLaunchTask": "build_hello", // 添加 "preLaunchTask" 编译任务
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
项目 | 说明 |
---|---|
name | 配置名称,会在启动配置的下拉菜单中显示 |
type | 配置类型,只能为cppdbg |
request | 请求类型,可以为launch或attach |
program | 将要调试的程序的路径 |
args | 调试时传递给程序的命令行参数 |
stopAtEntry | 设为true程序会暂停在入口处 |
cwd | 调试程序时的工作目录 |
environment | 环境变量 |
externalConsole | 调试时是否显示控制台窗口 |
MIMode | 指定连接的调试器,可以为gdb或lldb |
preLaunchTask | 调试开始前执行的任务,一般为编译程序 |
ctrl+shift+p 搜索选择 “配置任务”
图2. 选择“配置任务”
修改生成的 tasks.json为
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "build_hello", // 与launch的"preLaunchTask"一致
"type": "shell",
"command": "make", // 使用 makefile
"problemMatcher": {
"owner": "cpp",
"fileLocation": [
"relative",
"$workspaceRoot"
],
"pattern": {
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
},
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
/* makefile */
hello : main.o solution.o
g++ -o hello main.o solution.o
main.o : main.cpp solution.h
g++ -g -c main.cpp
solution.o : solution.h solution.cpp
g++ -g -c solution.cpp
clean :
rm main.o solution.o hello