C++ 开发 + VSCode 调试

C++ 开发 + VSCode 调试

  • MSYS2 安装 gcc、make
    • 下载
    • 安装
      • MSMYS2
        • pacman 添加镜像源
      • GCC
        • 1. 安装
        • 2. 查看结果
        • 3. 环境变量
      • GDB
  • VSCode 调试
    • 所需插件
    • 创建项目
    • 调试代码
      • 1. tasks.json 配置任务
      • 2. launch.json 配置调试
      • 3. 运行
    • 更进一步的 C/C++ 设置
  • 参考资料

MSYS2 安装 gcc、make

下载

官方下载
清华大学开源软件镜像站:MSYS2 软件仓库

安装

  • MSYS2:
    1. 主要功能是提供一个在Windows操作系统上模拟类Unix环境的开发和构建工具集。它提供了一个模拟POSIX系统的命令行接口和包管理器(Pacman)。
    2. MSYS2基于Cygwin技术,但它更专注于构建原生Windows应用程序。
    3. 它的目标是创建一个易于使用的开发平台,使得开发者能够在Windows上编译和运行那些原本在Unix/Linux环境下开发的开源软件。
  • MinGW-w64:
    1. 是一个项目,其目的是为Windows提供GCC(GNU Compiler Collection)和其他工具链的移植版本,以便能够直接生成64位或32位Windows原生可执行文件,无需依赖Cygwin或其他兼容层。
    2. MinGW-w64支持现代Windows特性,并解决了早期MinGW在64位系统支持上的局限性。
  • 两者的关系:
    1. MSYS2 集成了 MinGW-w64 工具链,使得用户可以通过简单的命令行操作安装和使用 GCC 编译器来编译 Windows 原生程序。
    2. 使用 MSYS2 的开发者可以利用其提供的包管理系统快速获取并更新 MinGW-w64 等工具链及相关库文件,简化了Windows下的跨平台开发流程。

MSMYS2

下载后直接运行安装即可,我装在: D:\msys64
安装好后,出现多个快捷方式,下表简单是介绍
在这里插入图片描述

快捷方式描述
MSYS2 CLANG64使用Clang编译器的64位版本环境,提供基于LLVM的C、C++和Objective-C编译器工具链,用于生成Windows 64位原生可执行文件。
MSYS2 CLANGARM64同样基于Clang,但针对ARM64架构(如Windows on ARM),为ARM64平台提供编译环境。
MSYS2 MINGW32运行32位MinGW-w64工具链的命令行环境,适用于编译面向32位Windows系统的原生应用。
MSYS2 MINGW64提供64位MinGW-w64工具链的命令行环境,主要用于编译运行在64位Windows系统上的原生应用,是常用的开发选项。我用的这个
MSYS2 MSYS基于POSIX兼容层的Shell环境,提供较为完整的Unix/Linux-like环境,支持那些需要较高程度POSIX兼容性的软件编译或脚本执行。
MSYS2 UCRT64使用Universal CRT (UCRT) 的64位工具链环境,该环境下的工具链依赖较新的Windows SDK,可能包含对最新Windows特性和API的支持。

接下来的操作需要用到 pacman 命令,此表是简单的介绍,先了解一下:

命令功能描述
pacman -Syu同步并更新系统所有的软件包到最新版本(包括内核与核心库)
pacman -S package_name安装指定的单个软件包及其依赖
pacman -S package1 package2安装多个指定的软件包及它们的依赖
pacman -R package_name卸载指定的软件包,但保留其配置文件
pacman -Rs package_name卸载指定的软件包,并删除其配置文件
pacman -Ss search_term搜索软件仓库中包含指定关键词的软件包
pacman -Qpacman -Qe列出已安装的所有软件包
pacman -Qi package_name查询特定软件包的详细信息
pacman -Qo /path/to/file查看指定文件属于哪个已安装的软件包
pacman -Scc清理缓存,删除所有未使用的包文件
pacman -Sy只同步软件数据库,不进行更新操作
pacman -Su更新所有已安装且有更新版本的软件包
pacman -Syu --noconfirm强制更新系统且不询问用户确认
pacman 添加镜像源
# 编辑源
nano /etc/pacman.d/mirrorlist.mingw64

将清华镜像添加到开头 Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/x86_64
最后 Ctrl + X 退出如有提示按 Y 保存

GCC

1. 安装

我是 win11 x64系统,所以我装这个版本 mingw-w64-x86_64-gcc

# 查看
pacman -Ss mingw-w64-x86_64-gcc

# 安装前,先更新数据库和软件包,确保是最新的(如果需要)
pacman -Syu
# 如果有核心包更新,会关闭 MSYS2,自己手去打开 MSYS2 后再执行一下,继续完成非核心包更新
pacman -Syu

# 安装
pacman -S mingw-w64-x86_64-gcc

2. 查看结果

安装完成后 D:\msys64\mingw64\bin 目录下就有东西了
在这里插入图片描述
打开 D:\msys64\mingw64\bin 目录,
在地址栏输入 cmd 打开命令行,输入命令查看版本
gcc --versiong++ --version

在这里插入图片描述

3. 环境变量

D:\msys64\mingw64\bin 添加到环境变量。

  1. WIN + R 打开运行窗口.。
  2. 输入rundll32 sysdm.cpl,EditEnvironmentVariablesCtrl + Shift + 回车 打开窗口。
  3. 系统变量 中找到 Path 点编辑。
  4. 新增一条记录,写入 D:\msys64\mingw64\bin

GDB

# 安装
pacman -S mingw-w64-x86_64-gdb

在这里插入图片描述

VSCode 调试

所需插件

安装 C/C++ Extension Pack 就够了,C/C++ 扩展包 包含了在 Visual Studio Code 中进行 C++ 开发的一系列热门扩展:

  • C/C++
  • C/C++ Themes
  • CMake
  • CMake Tools

创建项目

  1. 新建一个文件夹 demo1 用 VSCode 打开。
  2. 创建 helloworld.cpp 文件,内容:
#include <iostream>
#include <string>

using namespace std;

int main()
{
  cout << "Hello World" << endl;
}

调试代码

因为 D:\\msys64\\mingw64\\bin\\g++.exeD:\\msys64\\mingw64\\bin\\gdb.exe 已经添加到环境变量。所以下面的配置中也可以改为相对路径

1. tasks.json 配置任务

终端 > 配置默认生成任务…
在这里插入图片描述
完成后将自动生成 tasks.json,内容如下:(注意检查 commandcwd 是否正确)

{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++.exe 生成活动文件",
            "command": "D:\\msys64\\mingw64\\bin\\g++.exe",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "编译器: D:\\msys64\\mingw64\\bin\\g++.exe"
        }
    ],
    "version": "2.0.0"
}

2. launch.json 配置调试

我们来设置 gdb 调试
在这里插入图片描述
如此可自动创建 launch.json,内容如下:(注意检查miDebuggerPath 是否正确)

{
    "configurations": [
        {
            "name": "(gdb) 启动",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "D:\\msys64\\mingw64\\bin\\gdb.exe",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description": "将反汇编风格设置为 Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ]
                        
        }
    ],
    "version": "2.0.0"
}

3. 运行

打开 helloworld.cpp 文件,按 F5 运行。

更进一步的 C/C++ 设置

c_cpp_properties.json 用于更改编译器路径、包含路径、C++ 标准(默认为 C++17)等设置。

  1. 命令面板:Ctrl + Shift + P 输入 C/C++ 选择:
    在这里插入图片描述
  2. 添加一个配置,并设置后会生成 c_cpp_properties.json 文件
    在这里插入图片描述
  3. c_cpp_properties.json 内容:
{
    "configurations": [
        {
            "name": "g++",
            "includePath": [
                "${workspaceFolder}/**"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "windowsSdkVersion": "10.0.19041.0",
            "compilerPath": "D:/msys64/mingw64/bin/g++.exe",
            "cStandard": "c17",
            "cppStandard": "c++17",
            "intelliSenseMode": "windows-gcc-x64"
        }
    ],
    "version": 4
}

参考资料

中国科学技术大学 http://mirrors.ustc.edu.cn/
清华大学 https://mirrors.tuna.tsinghua.edu.cn/

Using GCC with MinGW
launch.json and tasks.json 使用 ${variableName} 语法

MSYS2安装gcc、make环境
【VSCode】C++环境配置(小白必看)

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

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

相关文章

Java网络爬虫--HttpClient

目录标题 技术介绍有什么优点&#xff1f;怎么在项目中引入&#xff1f; 请求URLEntityUtils 类GET请求带参数的GET请求POST请求 总结 技术介绍 HttpClient 是 Apache Jakarta Common 下的子项目&#xff0c;用来提供高效的、功能丰富的、支持 HTTP 协议的客户端编程工具包。相…

Pycharm中如何配置python环境(conda)

首先在pycharm中点击 "File" > "Settings" 再次点击如下操作&#xff1a; 点击Python Interpreter的最右侧按钮&#xff0c;点击Show All... 找到python文件 最后点击OK

ros gazebo机械臂仿真,手动控制与MoveIt自动控制

本文总结归纳古月居胡春旭ros机械臂教程&#xff0c;给出了一些error的解决方法&#xff0c;补充了通过python运行moveit。十分建议去看github huchunxu源代码的repository。 创建机械臂的xacro模型 首先创建一个工作空间&#xff0c;在工作空间中创建arm_description功能包。…

Qt应用-实现图像截取功能类似QQ上传头像截取功能

本文演示利用Qt实现图像截取功能类似QQ上传头像截取功能。 效果如下,通过移动中间的裁剪区域可以获得一张裁剪后的图片。 目录

MySQL进阶之(二)索引的数据结构

二、索引的数据结构 2.1 关于索引2.1.1 什么是索引&#xff1f;2.1.2 为什么使用索引&#xff1f;2.1.3 索引的优缺点01、优点02、缺点 2.1.4 一个简单的索引设计方案 2.2 InnoDB 中的索引设计2.2.1 迭代①&#xff1a;目录项记录的页2.2.2 迭代②&#xff1a;多个目录项记录的…

程序媛的mac修炼手册-- 终端(terminal)常用命令

「终端&#xff08;terminal&#xff09;」相当于macOS的一个 App &#xff0c;它的特殊之处是&#xff0c;它是管理其它App的App&#xff0c;操作主要通过命令行界面 (CLI) 。 相比于我们日常熟悉的用户界面&#xff08;User Interface&#xff0c;UI&#xff09;&#xff0c…

顺序栈之共享栈实现——C语言

参考书&#xff1a;数据结构教程 第5版 李葆春 P83 #include <stdio.h> #include <string.h> #include <stdlib.h>#define MaxSize 10/*共享栈*/ typedef struct {char data[MaxSize];int top1,top2,len; }DStack;/*初始化*/ void InitStack(DStack *s){s-…

HCIA-Datacom题库(自己整理分类的)_17_简单的命令判断【11道题】

1.华为AR路由器的命令行界面下&#xff0c;save命令的作用是保存当前的系统时间。 解析&#xff1a;Save保存配置 2.VRP界面下&#xff0c;使用命令delete vrpcfg.zp删除文件&#xff0c;必须在回收站中清空&#xff0c;才能彻底删除文件。√ 解析&#xff1a;delete删除到回…

Selenium 学习(0.19)——软件测试之基本路径测试法——拓展案例

1、案例 请使用基本路径法为变量year设计测试用例&#xff0c;year的取值范围是1000<year<2001。代码如下&#xff1a; 2、步骤 先画控制流程图 再转化为控制流图&#xff08;标出节点&#xff09; V(G) 总区域数 4 V(G) E - N 2 (边数 - 节点数 2…

AArch64 Exception Model学习

提示 该博客主要为个人学习&#xff0c;通过阅读官网手册整理而来&#xff08;个人觉得阅读官网的英文文档非常有助于理解各个IP特性&#xff09;。若有不对之处请参考参考文档&#xff0c;以官网文档为准。 1 Privilege and Exception Levels 1.1 为什么要划分权限&#xf…

5分钟使用Hologres实时湖仓加速分析挑战赛来袭

活动简介 5分钟快速使用Hologres实时湖仓能力&#xff0c;加速分析数据湖OSS上Hudi、Delta、Paimon、ORC等格式数据&#xff0c;赢取精美礼品 活动入口&#xff1a;Hologres实时湖仓分析挑战赛-阿里云开发者社区 或点击文末【阅读全文】参与挑战 活动时间 2024年1月4日-202…

爬取国家法律法规数据库法律条文

代码展现&#xff1a; import requests import os filename 法律条文\\ if not os.path.exists(filename):os.mkdir(filename) url https://flk.npc.gov.cn/api/? data {type: flfg,searchType: title;vague,sortTr: f_bbrq_s;desc,gbrqStart: ,gbrqEnd: ,sxrqStart: ,sx…

【C语言】TCP测速程序

一、服务端 下面是一个用 C 语言编写的测试 TCP 传输速度的基本程序示例。 这只是一个简单示例&#xff0c;没有做详细的错误检查和边缘情况处理。在实际应用中&#xff0c;可能需要增加更多的功能和完善的异常处理机制。 TCP 服务器 (server.c): #include <stdio.h> #…

【c++】vector模拟

> 作者简介&#xff1a;დ旧言~&#xff0c;目前大二&#xff0c;现在学习Java&#xff0c;c&#xff0c;c&#xff0c;Python等 > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;能手撕vector模拟 > 毒鸡汤&#xff1a;在等待…

动态规划(分割等和子集)

416. 分割等和子集 题目难易&#xff1a;中等 给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集&#xff0c;使得两个子集的元素和相等。 注意: 每个数组中的元素不会超过 100 数组的大小不会超过 200 示例 1: 输入: [1, 5, 11, 5] 输出: true 解释: 数…

STM32入门教程-2023版【3-3】gpio输入

关注 星标公众号 不错过精彩内容 大家好&#xff0c;我是硬核王同学&#xff0c;最近在做免费的嵌入式知识分享&#xff0c;帮助对嵌入式感兴趣的同学学习嵌入式、做项目、找工作! 上两小节我们已经把GPIO的结构和8种输入输出模式都讲完了&#xff0c;到这里还不懂的可以回…

浅析内存一致性:内存屏障

文章目录 概述内存乱序访问Store Buffer和Invalidate QueueStore BufferStore ForwardingStore Buffer与内存屏障 Invalidate QueueInvalidate Queue与内存屏障 内存屏障分类编译器屏障CPU内存屏障 相关参考 概述 内存屏障&#xff0c;是一类同步屏障指令&#xff0c;是CPU或编…

Java中的输入输出处理(一)

文件 文件&#xff1a;文件是放在一起的数据的集合。比如1.TXT。 存储地方&#xff1a;文件一般存储在硬盘&#xff0c;CD里比如D盘 如何访问文件属性&#xff1a;我们可以通过java.io.File类对其处理 File类 常用方法&#xff1a; 方法名称说明boolean exists()判断文件或目…

处理机调度与死锁

目录 进程调度算法先来先服务调度算法FCFS最短作业优先调度算法SJF最高优先级调度算法***HPF***高响应比优先调度算法 ***HRRN***时间片轮转调度算法***RR***多级队列调度算法MFQ 进程调度算法 进程调度算法也称为CPU调度算法 当 CPU 空闲时&#xff0c;操作系统就选择内存中…

一天一个设计模式---工厂方法

概念 工厂模式是一种创建型设计模式&#xff0c;其主要目标是提供一个统一的接口来创建对象&#xff0c;而不必指定其具体类。工厂模式将对象的实例化过程抽象出来&#xff0c;使得客户端代码不需要知道实际创建的具体类&#xff0c;只需通过工厂接口或方法来获取所需的对象。…