文章目录
preface
for windows
初学者还是建议用visual studio 2019+或其他版本,它们体积虽庞大,但是调试功能无比强大,变量类型,变量内存情况,调用堆栈,强大的调用层次分析
for linux
linux下使用vscode可以执行一些简单的编译,可以搭配手写编译命令/makefile/或者其他编译命令行生成工具
references
官网提供的配置教程(vscode+cpp):
https://code.visualstudio.com/docs/cpp/config-mingw
官方文档简述
- (利用默认生成的配置文件,快速配置环境)
私以为官方文档写的相当详实,且较为全面,一步一步的教授读者配置,相当好的一份文档,可以优先跳转到官方文档进行学习
网络上的其他相关配置文章大多不如官方介绍的那样好,那样全面
目录名要求
以下配置在文件(及其路径名中纯英文下可行,中文会引发出错)
但还是可以运行中文名cpp编译的源程序(主要是调试会有问题)
可以考虑将文件名重命名为英文
相关配置文件及含义
tasks.json
(build instructions)
launch.json
(debugger settings)
c_cpp_properties.json
(compiler path and IntelliSense settings
从windows开始
创建task.json配置文件(build instructions)
创建tasks.json文件是为了下次执行编译任务(run build task.)的时候不需要再次选择编译器.
同时方便配置launch.json,便于配置单步调试
requirement
vscode cpp 插件
Mingw
- 在系统环境变量(Path)变量中配置编译器所在路径,使得命令行中可以直接调用
gcc
或者g++
- 当然,如果还安装了visual stuido(比如vs2019),那么可以使用vs提供的编译工具
检查g++/gcc
g++ -v
file1:生成tasks.json
或者
- 接着,您检查一下.vscode目录下的文件是否包括:
task.json
修改task.json的内容(optional)
这一步不是必须,具体字段参看文档
值得关注的是,字段lable
,譬如"label": "C/C++: gcc build active file",
,该字段的值将在后续的launch.json
中引用,来使得项目(launch.json能够指引vscode找到正确的task.json进行编译源代码
总之,这个名字和后续提到的launch.json中的"preLaunchTask"
字段取值一致即可
譬如,这里提到的两个字段可以都取:"C/C++: gcc build active file",
然后准备一个测试代码c/c++
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main()
{
vector<string> msg {"Hello", "C++", "World", "from", "VS Code", "and the C++ extension!"};
for (const string& word : msg)
{
cout << word << " ";
}
cout << endl;
}
调试
在合适的地方打下断点:
- 如果之前您的mingw环境可用(#include头文件正常)
那么可以就可以调试啦(task.json)的内容
会自动生成, - 现在,您按下ctrl+shift+b(command palette 中执行
run build task
),执行task.json
终端和调试控制台
需要交互的控制台点击terminal选项卡输入(not debug console)
此时您应当在当前目录下得到一个.exe文件(可以用于调试)
此时具有最基本功能,但还不方便,编译完的程序还要手动选择并运行(F5)
创建&编写launch.json(调试配置文件)
使用
launch.json
使得编译调试一气呵成
或者
Note:在2022年的时候,我重新试了官方文档的流程,发现在配置launch.json的时候,生成的模板是空的,
没关系,只需要将下文提供的模板粘贴到launch.json
中(该模板来自参考文档),在修改"preLaunchTask": 字段的值使得其与task.json中提到的lableh值一致即可,如果恰好一致就不用改
- 您可以手动在
.vscode
目录下创建一个launch.json
- 也可通过点击图标创建
手动编写过程中有模板提示
我的launch.json (for windows)
根据我的Mingw(g++),生成的launch.json:
这样子生成的我文件目录是配好的,也可以根据文档的字段解释进行参数修改
主要是MinGw中的gdb程序文件目录:miDebuggerPath
以及preLaunchTask
编译配置文件名称(label in task.json)
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "g++.exe - Build and debug active file",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": false,
"cwd": "D:\\MinGW64\\bin",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "D:\\MinGW64\\bin\\gdb.exe",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "Set Disassembly Flavor to Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
],
"preLaunchTask": "C/C++: g++.exe build active file"
}
]
}
选择调试工具/环境
如下结果视vscode版本和c++插件版本的不同而异,如果有第一项最好(第二项也可以)选择之后,即可使用
还可以自行配置其内容
task.json和launch.json的关系
F5运行launch.json,launch.json会执行task.json指定的任务(作为launch.json的预执行任务(编译c/cpp得到可执行文件),然后执行launch的主体任务(运行得到的可执行文件)
这体现在launch.json中的"preLaunchTask": "C/C++: g++.exe build active file"
可选的c_cpp_properties.json
C/C++ configurations#
您可以在这里选中/切换编译器种类,且配置完毕后将vscode重启(如果为未能立即看到效果),以便使变更生效
在某些时候,该配置很有用,比如您要使用自己编写的头文件/库(或则来自其他人便携的相关程序,在此处更改即可)
If you want more control over the C/C++ extension, you can create a
c_cpp_properties.json file, which will allow you to change settings
such as the path to the compiler, include paths, C++ standard (default
is C++17), and more.You can view the C/C++ configuration UI by running the command C/C++:
Edit Configurations (UI) from the Command Palette (Ctrl+Shift+P).
result
中文输出会乱码?
如果您使用cmd作为默认vscode的terminal,可能再输出中文时会乱码
如果时windows10以上的系统,已经自带powershell(但自带版本太老,还是很肯能会乱码)
现在建议您安装powershell7+的新版本作为默认的terminal
然后再安装一个oh my posh 主题,配上Nerd Font字体,您就可以看到上图中的效果,而且不会中文输出时就乱码
new posh (with Hack Nerd Mono Font):
linux + vscode c/c++
- 由于linux安装的gcc/g++/gdb位置比较统一,配置起来会稍微更方便一些
- 总体流程几乎一样
MinGw细节(optional)(for windows user):
1.首先是到官网下载MinGw installer 安装文件(比较慢)(或者其他自带mingw的ide,比如DEV-cpp)
网站有时比较慢,下载也比慢;(可能要访问外网)
考虑第三方下载;
https://wws.lanzoui.com/i7ncnr1855g
密码:hg9b
将文件解压到某个你熟悉的路径
正式开始配置前,请把之前产生的该目录下的.vscode文件夹删除,(里面的.json文件删除)
已以免旧文件和配置操作产生新文件引起冲突
此外,如果要使用code runner插件来编译.c文件,那么注意配置C99编译:
详情可以看:
https://blog.csdn.net/xuchaoxin1375/article/details/111644789
这个链接的文章对code runner插件运行c++(C可以做类似的修改)配置做了源文件名的容错优化,基本解决了因为文件名包含空格,小数点等非标识符组成字符带来的异常.!!!
但是,如果要调试,那么依然不能包含中文
比如:下图。里边有个重要的bin文件夹
将该路径复制;以便配置环境变量
配置环境变量(用户变量/环境变量任意配置一个即可;)双击粘贴刚才复制的路径
检测:
在键盘上按win+R:再输入cmd
输入g++,如果g++弹出以下内容,说明配置成功;
或者使用g++ -v:(查看g++版本)
弹出非报错内容即为成功
建立规范的目录
现在,可以在你喜欢的任意地方建立一个不含中文,注意不含中文的规范名字(当然,如果包含中文,那么虽然您可以编译运行,但是gdb就无法调试了(基于Microsoft C++或许可以),的文件夹(最好满足变量标识符的命名规则的文件夹,)然后用vscode打开这个文件夹
编写一个简单的hello world程序:
#include<iostream>
using namespace std;
int main()
{
cout<<"hello,world"<<endl;
cout<<1+1<<endl;
}
然后按F5,开始调试,会弹出:
注意,如果您在某个已有和调试.json文件相关的文件(launch.json),那么应当将其备份后删除,然后在添加全新的调试文件:
这种情况可能发生在之前没有成功的配置文件残留下来的
可能是您在某个其他类型语言的工程目录下开始本教程,不过您可以通过如下界面来规避上述两个问题:
点开debug,选择合适的调试配置json文件(这里没有c/c++的调试配置文件(只有python的配置文件):
Add Configuration:
然后选择对应的调试配置文件
选择编译器完毕后
在左侧出现文件夹.vscode 里面有launch.json和task.json
如果mingw的路径发生变化,那么可以修改launcher.json和tasks.json中的路径:
(到这里基本可以使用了,但还不是很方便,输出的内容要从终端选项卡转到调试控制台console那里去看结果)
想要根据直观的从弹出的终端中查看调试过程中打印的信息,可以再做如下配置:打开左侧里的launch.json文件;
如果程序因为错误编译不通过;
有
正确程序的正常调试:
为了结果一闪而过,建议在程序中的合适位置打断点!;
如果,此前已经安装了最新版(5.15)的DevC++
那么. vscode文件夹中的launch.json和task.json就是
一步到位的.
立即修改如下选项,才可以正常使用:(true)
当然你可能还需要最新版本的vscode配合.