vscode配置c++环境

news2024/11/18 23:30:37

第一步:安装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官方文档

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

web浏览器脚本的调试

水一贴。 在浏览器中按F12点击"source"或者"源程序"点击html、js、css等源码文件所在的窗口的左边,此时点击处显示为蓝色光标,表示断点中断已经设置完毕。配合窗口右上角的"继续" “下一步” "跳过"等控制按钮…

计算机SCI期刊,和计算机会议哪个更权威? - 易智编译EaseEditing

在计算机学科领域,SCI期刊和计算机会议都有其特点和优势,但两者在权威性方面可能存在一些差异。 SCI期刊是指被SCI(Science Citation Index)收录的学术期刊,SCI是Web of Science(科学引文索引)的…

[内测招募] IDEA 插件 X-ChatGPT 内测预览版 支持自定义 ChatGPT 回调函数 释放 AI 的无限可能性

X-ChatGPT 独创的 [项目感知] 功能 打造更精准、更智能、更懂你 的专属 ai 编程助手 这个插件是一款基于开源项目 ChatGPT-Next-Web的 IntelliJ IDEA 平台的插件 价格 :免费、速率限制 每小时/100 次/ip 使用方式 :在 IDEA 插件商店中搜索 X-ChatGPT…

信号三表block,pending、handler

目录 前序: 信号流程图: pending表(信号未决表 block表(信号阻塞表 handler表(信号递达表 小知识点 1:handler保存的是什么 前序: 进程信号中的三大表格 首先在了解进程信号中的三大表格…

SpringBoot Aop进行身份验证

忘了好复制🤣 创建一个注解,可以应用于类或者方法上的,进行表示身份认证。 Target({ElementType.TYPE, ElementType.METHOD}) Retention(RetentionPolicy.RUNTIME) public interface VerifyLogin { }定义一个没有登录的异常和全局异常处理器…

找样机素材,就上这5个网站,免费下载~

设计师经常需要用到各种样机模型来展示直接的作品,今天我就分享几个可以免费下载样机模型的网站,大家赶紧收藏起来! 菜鸟图库 https://www.sucai999.com/searchlist/3217.html?vNTYxMjky 菜鸟图库有多种类型的设计素材,像平面、…

fiddler过滤器

1、fiddler Fiddler是一个免费、强大、跨平台的HTTP抓包工具。下载地址 2、为什么适用过滤器 不适用过滤器时,所有的报文都会被抓包。 我们在开发或测试时,只需要抓包某个域名下的报文 ,以“www.baidu.com”为例,不设置过滤器&…

数据中台系列2:rabbitMQ 安装使用之 window 篇

RabbitMQ 是一个开源的消息队列系统,是高级消息队列协议(AMQP)的标准实现,用 erlang 语言开发。 因此安装 RabbitMQ 之前要先安装好 erlang。 1、安装 erlang 到 这里 下载本机能运行的最新版 erlang 安装包。如果本机没有装过 …

64核RISC-V服务器能打了吗?

作者:西风烈 最近看到“澎峰科技”的微信公众号,看到他们发布了第一款RISC-V服务器,芯片是算能的SG2042,带64个RISC-V核心(阿里平头哥的C910v核),2.0GHz主频,最大支持128GB内存。这…

【visual studio2019】如何打开即时窗口

在 Visual Studio2019 中打开即时窗口,有两种方法: 1、可以通过“调试”菜单,然后选择“窗口”下的“即时窗口”选项 2、直接使用快捷键“Ctrl Alt I” 此时即时窗口将显示在 Visual Studio2019 的底部。在即时窗口中,可以执…

Mybatis增强框架Mybatis-Flex

一、Mybatis-Flex是什么? Mybatis-Flex 是一个优雅的 Mybatis 增强框架,它非常轻量、同时拥有极高的性能与灵活性。我们可以轻松的使用 Mybaits-Flex 链接任何数据库,其内置的 QueryWrapper^亮点 帮助我们极大的减少了 SQL 编写的工作的同时…

Openlayers实战:绘制多边形,导出CSV文件

CSV(Comma-Separated Values)是一种常用的数据交换格式,是一种纯文本文件格式。在Openlayers的交互中,经常性的我们要导出一些数据,在这个实战中,演示的是导出CSV文件。 安装依赖 npm install file-saver --save npm install papaparse --save 效果图 导出的文件 源代码…

docker安装nginx并配置SSL

1、拉取镜像 docker pull nginx2、启动nginx容器,复制一份默认配置文件出来 // 以nginx镜像为基础镜像创建一个名为nginx01的容器 docker run -d -p 80:80 --name nginx01 nginx创建成功后会看到nginx的欢迎页面 3、挂载nginx目录 拷贝nginx的配置信息到主机目录…

【CAS6.6源码解析】深度解析默认票据存储策略及其拓展支持-探究存储策略的设计

CAS作为一款企业级中央认证服务系统,其票据的生成是非常重要的一环,在票据的生成中,还有一个比较重要的点是票据的存储,本文将默认票据存储策略及其拓展支持,并延伸到探究存储策略的设计。 文章重点分析源码的过程&…

一起学算法(二分查找篇)

1.线性枚举 1.线性枚举定义 线性枚举指的就是遍历某个一维数组(顺序表)的所有元素,找到满足条件的那个元素并且返回,返回值可以是下标,也可以是元素本身。 由于是遍历的,穷举了所有的情况,所以…

iphone卡在恢复模式怎么办?修复办法分享!

iPhone 卡在恢复屏幕问题是 iPhone 用户在软件更新或恢复期间的常见问题。如果你也遇到此问题,不要着急,接下来我们将探讨 iPhone 卡在恢复屏幕上的主要原因,以及如何轻松修复它。 iPhone卡在恢复屏幕问题上没有一个特别的原因,但…

ALLEGRO之Route菜单

本文主要介绍了ALLEGRO的Route菜单。 (1)Connect:走线; (2)Slide:推挤; (3)Timing Vision:等长设计时使用?暂不清楚; &…

【动态规划算法】-子序列问题题型(27-34题)

💖作者:小树苗渴望变成参天大树🎈 🎉作者宣言:认真写好每一篇博客💤 🎊作者gitee:gitee✨ 💞作者专栏:C语言,数据结构初阶,Linux,C 动态规划算法🎄 如 果 你 …

svn还原本地代码

svn代码还原 问题描述:在vscode中修改了代码,没有提交,而且不小心点击了svn更新,导致本地修改的最新代码被覆盖,因为没有提交,所以远程仓库中也没有刚才修改的代码记录 解决: 通过vscode的时间…

远距离传输大型文件:如何应对不同地区的网络环境和带宽约束

在现代社会中,远程传输大文件已经变得非常常见了。无论是个人生活还是各种组织之间的合作和协作,都需要频繁地进行文件传输。但是,由于不同地区的网络状况和带宽限制,传输大文件可能会遇到很多问题。因此,如何应对不同…