vscode配置c++环境

第一步:安装vscode编辑器

预先安装:

  1. vscode(https://code.visualstudio.com/)
  2. 在vscode中安装 C/C++ extension for VS Code(在左侧扩展栏中搜索 “C++”)

第二步:安装MinGW-w64工具链

MinGW 提供最新的GCC本地builds、MinGW-w64、其他C++工具和库。也可在 msys的github 处直接下载。

MSYS2需要在 Windows8.1及以上的操作系统运行。

其他注意事项请看:vscode官网

安装完成后,将 MinGW-w64 的 bin 文件夹路径(D:\CodingTools\CandCpp\MinGW64\bin)添加到Windows的 PATH 环境变量中。

最后在 cmd 中输入以下内容,如果有输出信息,表示安装成功。

gcc --version
g++ --version
gdb --version
  1. 请认准核对添加的path变量与 bin 目录的位置是否一致。
  2. gcc 有输出但 gdb 没有,需要从 MinGW-w64 toolset 中安装丢失的包。如编译过程中提示:“The value of miDebuggerPath is invalid.”说明丢失了mingw-w64-gdb package

第三步:建立helloworld.cpp

通过 cmd 进入某一个文件夹下,此目录存放源文件目录。在 cmd 输入:

# 在当前目录下打开vscode
code . 

如果有提示,选中 “Yes, I trust the authors”(只要是自己创建的文件夹)

后续在vscode的当前文件夹下,看到一个文件夹 .vscode,包含以下三个文件:

  • tasks.json:build 指令
  • launch.json:debug 设置
  • c_cpp_properties.json:编译器路径和智能提示设置

添加源文件

image-20230724154312675

ps:关于 vscode 编辑器的一些接口和布局;另外可以通过 tab 键选择智能提示的某些成员。

运行cpp后缀文件

  1. 打开helloworld.cpp使得该文件是 active file

  2. 点击右上角:Run C/C++ File

    image-20230724155111697

  3. 从检测到的系统中的编译器中,选择:C/C++: g++.exe build and debug active file (只会在第一次编译运行此cpp文件时选择编译器)(cpp和g++的区别?)

    image-20230724155359146

  4. 终端显示有以下信息,运行成功

    image-20230724155558595

关于tasks.json

第一次运行程序,c++扩展会在.vscode文件夹下创建一个task.json文件(其实该文件是保存在关于 build 的配置中,?)

下面是一个例子:

{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++.exe build active file",   // 此值会在任务列表中看到(tasks list ?),可以取任意值
            "command": "D:\\CodingTools\\CandCpp\\MinGW64\\bin\\g++.exe",
            // 1. command:明确要运行的程序是使用g++编译器
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],
            /*
            args数组:传递给g++的命令行参数
            第一个参数-fdiagnostics-color=always:对诊断信息使用颜色(一直),具体看gcc manuals
            -g:生成调式信息({file}:当前在vscode中打开的文件)
            -o:生成目标文件(win是exe后缀)
            ${fileDirname}:{file}所在的文件夹
            ${fileBasenameNoExtension}:{file},不包括后缀
            */
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "Task generated by Debugger."  // 任务列表中的任务的详细描述,推荐重命名这个值,从而区分相似任务
        }
    ],
    "version": "2.0.0"
}

关于task.json中变量的含义:https://code.visualstudio.com/docs/editor/variables-reference

play按钮会从task.json读取信息,从而知道如何编译运行程序。可以在task文件中定义多个编译任务,无论哪个任务被标记为默认任务,都会使用play按钮。

如果需要更改更改默认编译器,在命令版(Command Palette)中运行 Tasks: Configure Default Build Task (?)。或者可以更改task.json文件,移除默认配置,并且用:

    "group": "build",

替换默认配置中的下列部分:

    "group": {
        "kind": "build",
        "isDefault": true
    },

编译多cpp文件

使用参数"${workspaceFolder}/*.cpp" 代替 ${file}

也可以更改输出文件的名称:使用硬编码方式的文件名"${fileDirname}\\${fileBasenameNoExtension}.exe" 替换为"${workspaceFolder}\\myProgram.exe"

Debug helloworld.cpp

  1. 返回helloworld.cpp使其成为一个活跃文件

  2. 在鼠标某一行左侧边缘,或者在当前行按 F9 设置断点

  3. 右上角的下拉按钮中点击 Debug C/C++ File

    image-20230727123559095

    编辑器在对断点debug前,会高亮断点行;鼠标选中debug控制器左侧的原点,可拖动debug控制器的位置。

debug

1. 单步调试

1、设置好断点后,点击debug。点击debug控制器的第二个选项:Step Over(F10),结果如下图。此时会执行for循环中的第一行,跳过关于vector、string等需要被调用的类的内部函数,此时看左侧msg变量被创建和初始化。

image-20230728090152005

2、再次按下Step Over(F10)

image-20230728090630332

3、可以继续按下Step Over知道循环结束(C++ extension 2019.3 以后的版本,不会输出任何信息到Debug Console直到循环退出)。如果希望更深入地debug源代码中关于C++ standard library,可以按下Step Into(F11)

image-20230728211751154

返回helloword.cpp源代码:

  • 一直Step Over
  • 在for循环内部的cout附近插入断点,再按F5(Continue),就重新回到了for循环的cout语句。(此时如果按一次F5,terminal会显示一个vector中的单词)

4、debug结束后,终端会显示输出,也包含由GDB输出的诊断信息。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2QxAw1FI-1690797412575)(C:\Users\w\AppData\Roaming\Typora\typora-user-images\image-20230728212854134.png)]

2. 设置监视器(set a watch)

如果在debug时想观察一个变量的值,可以设置一个watch(监视)

  1. 现在循环中插入断点。点击左侧watch栏的加号,输入“word”(即循环变量的名称)。现在可以观察word中的值。

    image-20230728213518784
  2. 增加另一个watch:在循环前增加此语句:int i = 0; 然后在循环中增加语句: i++; 在watch栏增加对变量i的watch。

    image-20230728213916405
  3. 在debug过程中,如果想快速查看任何变量的值,可以将鼠标指针悬停在该变量上。

    image-20230728214406477

通过修改launch.json进行自定义debug

用play按钮或者F5debug时,C++扩展会动态创建debug配置。有时需要自定义debug配置(比如,需要在运行时指定一些参数传递给程序),可以在launch.json文件中自定义debug配置信息。

image-20230728215423029

选择第一个,创建一个launch.json文件。然后在下拉列表中选择GDB。

image-20230728215759705

然后点击右下角的Add configuration:

image-20230728220126955

以上几步的过程和vscode官方文档的教程不太一样,没有选取g++编译器的debug的过程。

最后launch.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": "(gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "enter program name, for example ${workspaceFolder}/a.exe", // 想要debug的程序
            // 官方文档的设置为:"${fileDirname}\\${fileBasenameNoExtension}.exe", 即活跃文件夹下后缀为exe的活跃文件
            "args": [],  // 此属性是要传递给程序的参数数组
            "stopAtEntry": false, // 默认情况下C++扩展不会增加任何断点在程序中,stopAtEntry为false
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "/path/to/gdb",
            // gdb.exe的位置,如"C:\\msys64\\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
                }
            ]
        }
    ]
}   

配置好launch.json后,当需要对程序debug,play按钮和f5会读取此文件信息。


其他关于C/C++的设置

如果想要更多关于 C/C++扩展的控制,可以创建一个文件: c_cpp_properties.json。在此文件中可以修改一些设置,如编译器路径、include路径、C++标准(默认是C++17)以及其他。步骤:

  1. Ctrl+Shift+P 打开命令版,输入“C/C++”,选中C/C++: Edit Configurations (UI)。这将会打开 C/C++配置页面,如果对此页面有任何改动,VS Code会将改动写入 .vscode文件夹下的 c_cpp_properties.json文件中。

    image-20230731174031288

  2. 查看配置文件页面和json文件内容:

    image-20230731174639751

    image-20230731174702183

    includePath:程序包含的头文件不在你的工作区或标准库路径,添加其路径到此数组中。

    compilerPath:C++标准库头文件路径。关于此参数的查找顺序:

    1. 首先查找MSVC编译器;
    2. 查找windows中是否存在子系统linux的g++;
    3. MinGW-w64 的g++;

    如果已经安装过WSL(Windows Subsystem for Linux,第2步)或 Visual Studio ,则需要修改 compilerPath 参数。


参考来源:

  1. VS Code官方文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/57681.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

超详情的开源知识库管理系统- mm-wiki的安装和使用

背景:最近公司需要一款可以记录公司内部文档信息,一些只是累计等,通过之前的经验积累,立马想到了 mm-wiki,然后就给公司搭建了一套,分享一下安装和使用说明: 当前市场上众多的优秀的文档系统百…

VBA技术资料MF36:VBA_在Excel中排序

【分享成果,随喜正能量】一个人的气质,并不在容颜和身材,而是所经历过的往事,是内在留下的印迹,令人深沉而安谧。所以,优雅是一种阅历的凝聚;淡然是一段人生的沉淀。时间会让一颗灵魂&#xff0…

设置系统编码 Beta

在yolov5环境搭建过程中会遇到如下的编码错误警告: 这时,按住“ctrlc”中止进程,然后设置系统编码: 电脑右键属性打开: 重启之后等安装好了,记得回去把bae键取消。

Ansible自动化运维工具 —— Playbook 剧本

playbooks 本身由以下各部分组成 (1)Tasks:任务,即通过 task 调用 ansible 的模板将多个操作组织在一个 playbook 中运行 (2)Variables:变量 (3)Templates:模…

iOS——Block one

块类似于匿名函数或闭包,在许多其他编程语言中也存在类似的概念。 可以访问上下文,运行效率高 Block 以下是块的一些基本知识: 块的定义:块是由一对花括号 {} 包围的代码片段,可以包含一段可执行的代码。块的定义使…

Stable Diffusion - Stable Diffusion WebUI 支持 SDXL 1.0 模型的环境配置

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/132056980 SDXL 1.0 版本 是 Stable Diffusion 的最新版本,是基于潜在扩散模型的文本到图像生成技术,能够根据输入的任何文…

机器学习知识经验分享之六:决策树

python语言用于深度学习较为广泛,R语言用于机器学习领域中的数据预测和数据处理算法较多,后续将更多分享机器学习数据预测相关知识的分享,有需要的朋友可持续关注,有疑问可以关注后私信留言。 目录 一、R语言介绍 二、R语言安装…

ansible的脚本——playbook剧本

目录 一、playbook的组成 二、 playbook安装httpd服务 1.编写playbook剧本 2.运行playbook 三、定义、引用变量 四、 指定远程主机sudo切换用户 五、when条件判断 六、迭代 七、Templates 模块 1.先准备一个以 .j2 为后缀的 template 模板文件,设置引用的变…

数据库:MYSQL参数max_allowed_packet 介绍

1、参数作用 max_allowed_packet参数是指mysql服务器端和客户端在一次传送数据包的过程当中最大允许的数据包大小。如果超过了设置的最大长度,则会数据库保持数据失败。 2、问题场景 ● 有时候业务的需要,可能会存在某些字段数据长度非常大(比如富文本编辑器里面的内容),…

docker 哨兵模式和集群模式安装Redis7.0.12

docker 哨兵模式和集群模式安装Redis7.0.12 1.下载镜像 1.1 配置阿里云加速源 墙外能访问https://hub.docker.com/_/redis 的可跳过 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 登录后选择左侧的镜像工具>镜像加速器,获取加速器地址&#…

Vue3和typeScript路由传参

1 params传的参数,页面刷新就消失,而query传的参数,页面刷新还会存在,所以通常用query。 query传参 跳转页面:拿到router对象,调用push方法做跳转. import { useRoute,useRouter} from "vue-router"; export default…

GPIO简介

一、GPIO GPIO(General-purpose input/output)即通用型输入输出,GPIO可以控制连接在其之上的引脚实现信号的输入和输出 芯片的引脚与外部设备相连,从而实现与外部硬件设备的通讯、控制及信号采集等功能 LED实验步骤 实验步骤 以L…

图文演示:如何三分钟极速搭建一个元宇宙3D虚拟展厅

引言: 元宇宙3D虚拟展厅时代已经来临。元宇宙是一个虚拟的、立体的数字空间,可以让用户沉浸在其中进行交互操作,并体验无限可能。如何快速搭建一个属于自己的虚拟展厅则受到越来越多人的关注。 一.虚拟展厅类型 1.党建展馆 实现…

小研究 - 微服务系统服务依赖发现技术综述(一)

微服务架构得到了广泛的部署与应用, 提升了软件系统开发的效率, 降低了系统更新与维护的成本, 提高了系统的可扩展性. 但微服务变更频繁、异构融合等特点使得微服务故障频发、其故障传播快且影响大, 同时微服务间复杂的调用依赖关系或逻辑依赖关系又使得其故障难以被及时、准确…

mysql月统计数据,没有的填充为0

要按时间戳字段按月份分组查询记录表,可以使用DATE_FORMAT函数将时间戳字段格式化为年月格式,然后将结果按照该字段进行分组。 SELECT a.month month,ifnull(b.count, 0) count FROM (SELECT 1 month UNION ALL SELECT 2 month UNION ALL SELECT 3 mont…

Vue实现leafletMap自定义绘制线段 并且删除指定的已绘制的点位

效果&#xff1a;点击表格可实现选中地图点位&#xff0c;删除按钮点击可删除对应点位并且重新绘制线段&#xff0c;点击确定按钮 保存已经绘制的点位信息传给父组件 并且该组件已实现回显 完整的组件代码如下 文件名称为&#xff1a; leafletMakePointYt <!--* Descripti…

小红书APP出现闪退问题,电商erp系统接口测试怎么做?(一)

7月27日凌晨&#xff0c;部分网友反馈小红书APP出现闪退问题。对此&#xff0c;小红书客服微博发文称&#xff0c;如遇到小红书APP无法启动的情况&#xff0c;用户可前往AppStore下载最新版本。 大家在讨论崩溃原因时&#xff0c;提到大概是接口出现了问题&#xff0c;对于软件…

05-向量的意义_n维欧式空间

线性代数 什么是向量&#xff1f;究竟为什么引入向量&#xff1f; 为什么线性代数这么重要&#xff1f;从研究一个数拓展到研究一组数 一组数的基本表示方法——向量&#xff08;Vector&#xff09; 向量是线性代数研究的基本元素 e.g. 一个数&#xff1a; 666&#xff0c;…

企业大数据可视化案例专题分享-入门

一、什么是数据可视化&#xff1f; 基本概念&#xff1a;数据可视化是以图示或图形格式表示的数据。让决策者可以看到以直观方式呈现的分析&#xff0c;以便他们可以掌握困难的概念或识别新的模式。借助交互式可视化&#xff0c;可以使用技术深入挖掘图表和图形以获取更多详细…

Pytorch基础

文章目录 一、Pytorch简介二、安装2.1 安装GPU环境2.2 安装Pytorch2.3 测试 三、Tensor3.1 Tensor创建3.1.1 torch.tensor() && torch.tensor([])3.1.2 torch.randn && torch.randperm3.1.3 torch.range(begin,end,step)3.1.4 指定numpy 3.2 Tensor运算3.2.1 A…