当前位置: 首页 > news >正文

windows下使用vscode编写运行以及调试C/C++

vscode支持类似于vs的断点调试c/c++,也可以直接编译&运行c/c++

先是编译运行 c/c++的方法                             

微软官方起初设定的科学做法(这也是现在的科学做法)是通过在vscode集成控制台写命令行的方式来实现编译运行程序的,但也可以通过code runner插件来简化步骤,实现一键编译执行

但无论是什么方法,因为vscode本身并不带有编译器,都需要自己提前安装好一个c/c++编译器(如mingw,clang)并且配置好环境变量(不会请点击这里)

控制台下编译运行C/C++(如果不懂命令行操作可以暂时跳过这里):

按 ctrl + ~ 打开vscode控制台,点击终端,在vscode的终端下操作其实就是在windows下的cmd或者powershell下操作,一切的编译运行等操作可以用输入命令行的方式来实现,只要掌握各自的编译器的命令行指令就能让程序在vscode界面上运行起来

c/c++编译器的那一套自然不在话下(如下图),先用cd 命令切换到源文件目录或者直接输入完整路径名,然后用编译器指令(假设编译器是mingw) g++ xxx.cpp -o xxx.exe编译,接着再输入./xxx.exe就可以运行编译好的程序

其他的c/c++编译器如clang包括其他语言(Python ,Go,Java...)都可以类似的这样操作

 

便捷方式是使用code runner插件:

code runner插件默认的c/c++编译器是gcc/g++,需要提前安装好并且设置好环境变量,通常选择MinGW或者MinGW-w64,建议选mingw-w64,一般用户建议下载离线版解压后添加环境变量,离线版下载地址:链接

不会请看:安装mingw-w64具体过程

同时,code runner插件使用的编译器是可以被修改为gcc/g++以外的编译器的(比如clang,MSVC),有这方面需要请看:vscode修改code runner使用的编译器

mingw和mingw-w64是有区别的,直观的说,mingw-w64更加强大

安装好并且设置好二者中的一个,并设置好环境变量后在cmd下输入gcc -v确认是否成功,出现关于gcc -v的相关信息(如下图)就表示成功

接着点击vscode左侧面板中的插件商店按钮

安装好下面两个插件

C/C++

Code runner

如果需要中文请安装一个chinese插件

注意,如果没安装clang的话不要安装推荐插件里的c/c++ clang插件,否则应该会报错

安装好后重启一下vscode这样就能在右上角看见一个三角形了,打开文件点击就能编译执行

但此时会有这样一个问题

如果程序里有scanf()等请求键盘输入数据的函数,此时无法从键盘输入数据,并且程序无法结束需要关闭重启vscode才能重新执行

解决办法是依次打开:文件>首选项>设置>用户设置>拓展>Run Code Configuration

找到  Run In Terminal  打上勾 这样运行的程序就会运行在vscode的集成控制台上

在工作区设置也有这个选项,但工作区设置只会对工作区生效

这样问题就能解决了

 运行一段测试代码

复制代码

#include<bits/stdc++.h>  
using namespace std;  int main(){  cout<<"hello"<<endl;  int u;  while(cin>>u){  cout<<u*u<<endl;  }  
}  

复制代码

这时输出信息会显示在终端栏下面

随便输入测试数据

可以看到下图的效果

 

点击右上角的垃圾桶能提前结束程序运行

code runner插件有一个局限,code runner插件的原理其实是自动在控制台下帮助我们输入g++ xxx.cpp -o xxx.exe(假设是默认情况)这条编译指令,不会再添加额外的命令,比如如果代码中使用了winsock2用g++编译的话需要额外添加-lwsock32指令,即完整指令为g++ xxx.cpp -o xxx.exe -lwsock32,此时直接使用code runner的话会无法编译,这种情况应该使用上面提到的vscode集成控制台手动输入编译指令编译

调试 c/c++方法          

首先一点:不支持中文路径!!!(文件名和整个文件路径名中都不能有中文,否则无法调试,是由mingw不支持中文路径造成的)

实际效果类似vs那样按f5断点调试

首先选中一个用于存放各种代码的文件夹作为根路径也就是工作区,因为调试只会对根路径下的文件生效!!!

在vscode中打开这个文件夹(文件>打开文件夹>选中你的文件夹)

之后再在这个文件夹新建一个 .vscode 的文件夹,不要忘了开头的 "." 号(如果已有则不必再额外新建)

再在.vscode文件夹中新建两个配置文件 launch.json 和 tasks.json

类似于下图

之后再把下面的两个段代码粘贴到对应的文件里

这里需要修改一处:launch中 "miDebuggerPath" 选项需要设置为你的调试器(gdb.exe)所在位置 这里的是我电脑上MinGW -w64的安装位置

无论安装的是MinGW还是mingw-w64,都会有一个gdb.exe在安装目录的bin文件夹下,一定要把对应的路径修正否则无法调试

launch.json

复制代码

{

    "version": "0.2.0",

    "configurations": [

        {

            "name": "C/C++",

            "type": "cppdbg",

            "request": "launch",

            "program": "${fileDirname}/${fileBasenameNoExtension}.exe",

            "args": [],

            "stopAtEntry": false,

            "cwd": "${workspaceFolder}",

            "environment": [],

            "externalConsole": true,

            "MIMode": "gdb",

            "miDebuggerPath": "C:/Program Files/mingw64/bin/gdb.exe",

            "preLaunchTask": "g++",

            "setupCommands": [

                {

                    "description": "Enable pretty-printing for gdb",

                    "text": "-enable-pretty-printing",

                    "ignoreFailures": true

                }

            ],

        },

    ]

}

复制代码

tasks.json

复制代码

{

    "version": "2.0.0",

    "command": "g++",

    "args": [

        "-g",

        "${file}",

        "-o",

        "${fileDirname}/${fileBasenameNoExtension}.exe"

    ],

    "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

    }

}

复制代码

之后打开在当前工作区子目录下的.c/cpp文件就可以添加断点进行调试了

此时可以按 ctrl+shift+b 直接调用配置好的g++ task 编译程序而不运行程序,类似于一些IDE的编译选项

如果我们要查看当前某个变量的值或者某个表达式的值,可以像vs一样在左侧的调试面板添加监视

也可以在下方的调试控制台里直接输入表达式或者变量名

当然,最简单的还是鼠标直接移动到变量上,往往直接就显示出来了,如果靠这样不能解决的话,就试试上面两种方法

vscode支持实时报错,遇到找不到头文件的问题请点击 

也可以让c/c++程序的调试在vscode的集成控制台上进行,不在额外显示黑窗口,类似于code runner的界面效果

只需将launch.json中的 "externalConsole" 项由 true 改为 false 

经评论区提醒

此时可能会遇到这样一个问题,如果你的输入法当前是中文输入的话,输入数据时会很长时间才能反应过来,只需要按shift将输入法切换到英文状态就不会遇到这个问题了,可以直接设置输入法首选项为英文

效果

类似于code runner的问题: 如果是需要有额外的编译指令如-lwsock32,需要调试前事先在tasks.json的args处添加上对应的指令,或者用 // 注释掉launch.json中的 preLaunchTask:"g++"(启动调试前执行g++编译按tasks指令格式编译) 这一项,然后自己在按ctrl + ~ 打开终端手动编译好后再执行调试

记住:调试是属于工作区设置,当前配置的调试环境只会对当前.vscode文件夹所在路径下的文件生效,如果要换用别的文件夹,把.vscode这个文件夹拷贝过去即可

最后,我使用的主题插件为tangming Themes,感兴趣的可以去插件商店下载,里面一共四个主题

似乎有很多打ACM的同学在看,再提醒一点,在上面提到集成终端下调试,将题目测试数据粘贴到命令行,测试到一半就发现问题,点重新启程调试的按钮,会因为剩余的数据未被读取而造成错误

比如这样的错误信息:

所在位置 行:1 字符: 2
+ 5& 'c:\Users\tangm\.vscode\extensions\ms-vscode.cpptools-0.24.1\debug ...
+  ~
表达式或语句中包含意外的标记“&”。
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : UnexpectedToken

正常现象,再重新点一下启动就可以了

https://blog.csdn.net/2401_84266156/article/details/137731454?ops_request_misc=&request_id=&biz_id=102&utm_term=C/C++%E9%A1%B9%E7%9B%AE%E5%BC%80%E5%8F%91%E8%B5%84%E6%BA%90&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-5-137731454.142^v100^pc_search_result_base2&spm=1018.2226.3001.4187

相关文章:

windows下使用vscode编写运行以及调试C/C++

vscode支持类似于vs的断点调试c/c&#xff0c;也可以直接编译&运行c/c 先是编译运行 c/c的方法 微软官方起初设定的科学做法(这也是现在的科学做法)是通过在vscode集成控制台写命令行的方式来实现编译运行程序的,但也可以通过code runner插件…...

python容器4--集合

&#xff08;1&#xff09; 什么是集合 集合&#xff1a;Python中使用关键字set表示 集合中存储多个、没有顺序的、不能重复的、可以是不同类型的多个数据&#xff01; &#xff08;2&#xff09; 集合的声明 python中通过set()或者花括号声明空集合、非空集合 # 声明空集…...

MySQL record 01 part

更改密码&#xff1a; alter user rootlocalhost identified with mysql_native_password by ‘123456’; 注意&#xff1a; 在命令行方式下&#xff0c;每条MySQL的命令都是以分号结尾的&#xff0c;如果不加分号&#xff0c;MySQL会继续等待用户输入命令&#xff0c;直到MyS…...

2024年高教社杯全国大学生数学建模竞赛A题思路(2024数学建模国赛A题思路)

A题 “板凳龙” 闹元宵 “板凳龙”,又称“盘龙”,是浙闽地区的传统地方民俗文化活动。人们将少则几十条,多则上百条的板凳首尾相连,形成蜿蜒曲折的板凳龙。盘龙时,龙头在前领头,龙身和龙尾相随盘旋,整体呈圆盘状。一般来说,在舞龙队能够自如地盘入和盘出的前提下,盘龙…...

Go语言基础语法 20240904更新

代码开源地址 https://github.com/zhangdapeng520/zdpgo_basic 快速入门 示例代码&#xff1a; package mainimport "fmt"func main() {fmt.Println("Hello World") }第一行代码 package 用来声明包名。main包时整个程序的入口包&#xff0c;在一个Go语…...

软件测试 | 性能测试

性能测试的概念 为了 发现系统性能问题 或 获取系统性能相关指标 而进行的测试。 常见性能测试指标 并发数 即并发用户数。 从业务层面看&#xff0c;并发用户数指的是 实际使用系统的用户总数。从后端服务器层面看&#xff0c;指的是 web服务器在一段时间内处理浏览器请求而建…...

Arduino IDE

Arduino IDE&#xff08;集成开发环境&#xff09;的安装过程是一个相对直观且易于操作的流程&#xff0c;主要步骤包括下载、安装和配置。以下将详细阐述Arduino IDE的安装过程&#xff0c;同时提供一些背景信息和注意事项&#xff0c;确保安装过程顺利进行。 一、Arduino ID…...

统计学习方法与实战——统计学习方法之感知机

感知机 感知机三要素分析模型策略损失函数选择 算法原始形式对偶形式 相关问题 例子iris数据集分类实战数据集查看 显示结果sklearn 实战感知机 习题解答习题2.1解题步骤反证法 习题2.2习题2.3凸壳线性可分线性可分证明凸壳不相交证明充分性&#xff1a;凸壳不相交\Rightarrow⇒…...

语言学习有捷径?没错!这4个方法让你轻松搞定英语翻译

现在全世界都在用英语&#xff0c;这门语言真的超级重要。不管你是学习、上班还是出去玩&#xff0c;会点英语翻译肯定能帮上大忙。但是&#xff0c;对很多人来说&#xff0c;翻译英语还是挺难的。别急&#xff0c;今天我就来给你介绍几个超好用的英语翻译工具&#xff0c;让你…...

聊一聊大型网站稳定性建设思路

目录 架构阶段的稳定性建设项目 编码阶段的稳定性建设 测试阶段的稳定性建设 发布阶段的稳定性建设 运行阶段的稳定性建设项目 故障发生时的稳定性建设 网站稳定性的建设是一项综合的系统工程&#xff0c;就像人的健康一样&#xff0c;如果平时不注意健康饮食、不注意锻炼…...

Nginx常用配置

Windows版本Nginx开机自启动 可直接下载已经配置好的文件&#xff0c;点击即可下载&#xff1a;Windows版本Nginx1.26.0 下载WinSW v2.12.0 首先从https://github.com/winsw/winsw/releases下载WinSW v2.12.0 下载Nginx 下载地址https://nginx.org/en/download.html 修…...

前端开发中遇到的小问题以及解决方案记录2

1、H5中适配屏幕的工具-postcss-px-to-viewport postcss-px-to-viewport。因为设计稿一般给的都是375px宽度的&#xff0c;所以假如一个字体是16px&#xff0c;那么在开发中不能直接写死为16px&#xff0c;因为各个厂商的手机屏幕大小是不同的&#xff0c;所以要根据屏幕大小去…...

Qt-常用控件(3)-输入类

1. QLineEdit QLineEdit 用来表示单行输入框.可以输入一段文本,但是不能换行 核心属性 属性说明text输入框中的文本inputMask输入内容格式约束maxLength最大长度frame是否添加边框echoMode显示方式. QLineEdit::Normal :这是默认值&#xff0c;文本框会显示输入的文本。QLineE…...

使用Docker启动Redis容器并映射端口

在现代软件开发中&#xff0c;Redis 是一种非常流行的开源内存数据结构存储&#xff0c;通常用作数据库、缓存或消息传递系统。Docker 是一个开源的应用容器引擎&#xff0c;它允许开发者打包他们的应用以及依赖包到一个可移植的容器中&#xff0c;然后发布到任何流行的 Linux …...

用fastapi搭建cpca地址提取服务接口

以前的客户地址比较乱&#xff0c;现在想提取出省份城市&#xff0c; 开始了解分词技术&#xff0c;后发现python有这样的库 cpca提取地址挺不错&#xff0c;可以从垃圾地址中提取省市区以及区号。 文章会用fastapi搭建服务端 通过post调用cpca&#xff0c;提取来了后&#…...

libvncclient编写多线程qt的VNC客户端

概述 使用qt和libvncclient编写vnc的客户端程序&#xff0c;多线程读写&#xff0c;拒绝卡顿。qt环境&#xff1a;5.15.3libvncclient&#xff1a;0.9.14下载地址&#xff1a;https://github.com/LibVNC/libvncserver/releases 编译libvncclient 打开CMakeList文件&#xff…...

视频处理基础之gradio框架实现

这些函数是用于处理视频文件的Python代码片段&#xff0c;它们依赖于ffmpeg和ffprobe工具&#xff0c;这些工具是FFmpeg项目的一部分&#xff0c;用于处理视频和音频数据。下面是每个函数的用途和用法的总结&#xff1a; 1. ffmpeg_installed() 函数&#xff1a; - 用途&am…...

黑马点评2——商户查询缓存(P37店铺类型查询业务添加缓存练习题答案)redis缓存、更新、穿透、雪崩、击穿、工具封装

文章目录 什么是缓存&#xff1f;添加Redis缓存店铺类型查询业务添加缓存练习题 缓存更新策略给查询商铺的缓存添加超时剔除和主动更新的策略 缓存穿透缓存空对象布隆过滤 缓存雪崩解决方案 缓存击穿解决方案基于互斥锁方式解决缓存击穿问题基于逻辑过期的方式解决缓存击穿问题…...

概率DP (由一道绿题引起的若干问题。目前为一些老题,蒟蒻的尝试学习1.0)

概率DP&#xff1a; 利用动态规划去解决 概率 期望 的题目。 概率DP 求概率&#xff08;采用顺推&#xff09; 从 初始状态推向结果&#xff0c;同一般的DP类似&#xff0c;只是经历了概率论知识的包装。 老题&#xff1a; 添加链接描述 题意&#xff1a; 袋子里有w只白鼠&am…...

[Python]生成器和yield关键字

生成器和yield关键字 1.生成器介绍: 概述: ​ 它指的是 generator, 类似于以前学过的: 列表推导式, 集合推导式, 字典推导式… 作用: ​ 降低资源消耗, 快速(批量)生成数据. 实现方式: ​ 1.推导式写法. my_generator (i for i in range(5))​ 2.yield写法. def get_gene…...

Nginx 负载均衡+高可用 集群部署(Keepalived+LVS DR模式)

一、LVS负载均衡简介 1.1 LVS基本介绍 LVS&#xff08;Linux Virtual Server&#xff09;即Linux虚拟服务器&#xff0c;是由章文嵩博士主导开发的开源负载均衡项目&#xff0c;目前LVS已经被集成在Linux内核中。该项目在Linux内核中实现了基于IP地址的请求数据负载均衡调度方…...

算法 | 基础 | 出现奇数次的数字

这里写自定义目录标题 异或运算题目1题目2 本篇是关于异或&#xff08;^&#xff09;运算的运用。后期看算法过程中如果再碰到异或的都会收录到本篇中 异或运算 在逻辑学中&#xff0c;逻辑算符异或&#xff08;exclusive or&#xff09;是对两个运算元的一种逻辑析取类型&am…...

log4j 控制台和文件输出乱码问题解决

一个小问题&#xff0c;却让我感觉到&#xff0c;现在真正动脑的人很少。。我来说说吧。 今天遇到一个小问题&#xff0c; log4j输出到文件乱码&#xff0c;控制台正常。显然是编码问题导致。Google一搜&#xff0c;几乎一水的说&#xff1a; 项目中log4j在英文版linux下输出中…...

在国产芯片上实现YOLOv5/v8图像AI识别-【4.2】RK3588获取USB摄像头图像推流RTSP更多内容见视频

本专栏主要是提供一种国产化图像识别的解决方案&#xff0c;专栏中实现了YOLOv5/v8在国产化芯片上的使用部署&#xff0c;并可以实现网页端实时查看。根据自己的具体需求可以直接产品化部署使用。 B站配套视频&#xff1a;https://www.bilibili.com/video/BV1or421T74f 前言…...

TCP/IP协议栈详解及其在现代网络中的应用

在当今数字化时代&#xff0c;网络已成为我们生活中不可或缺的一部分。无论是社交、工作还是娱乐&#xff0c;网络都在背后发挥着至关重要的作用。而这一切的实现&#xff0c;都离不开TCP/IP协议栈。本文将详细介绍TCP/IP协议栈的结构、各层功能以及它在现代网络中的应用。 什…...

亚信安全荣获“2024年网络安全优秀创新成果大赛”优胜奖

近日&#xff0c;由中央网信办网络安全协调局指导、中国网络安全产业联盟&#xff08;CCIA&#xff09;主办的“2024年网络安全优秀创新成果大赛”评选结果公布。亚信安全信舱ForCloud荣获“创新产品”优胜奖&#xff0c;亚信安全“宁波市政务信息化网络数据安全一体化指挥系统…...

如何从硬盘恢复已删除/丢失的文件?硬盘恢复已删除的文件技巧

如何从硬盘恢复已删除/丢失的文件&#xff1f;本教程将教您如何使用专业硬盘恢复软件从内置或外置硬盘恢复数据&#xff0c;或不使用软件从硬盘恢复已删除的文件。 “有人知道如何从外部硬盘恢复文件吗&#xff1f;当我将外部硬盘插入计算机时&#xff0c;我错误地删除了一些文…...

[Linux]:权限

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;Linux学习 贝蒂的主页&#xff1a;Betty’s blog 1. Linux权限的基本概念 1.1 root与普通用户 在Linux系统中&#xff0c;存在…...

启动Spring Boot报错

一、遇到的问题 启动Spring Boot报错 Unable to close ApplicationContext org.springframework.boot.SpringApplication: Application run failed java.lang.IllegalStateException: Error processing condition on org.springframework.boot.autoconfigure.cache.CacheAutoCo…...

部署project_exam_system项目——及容器的编排

&#xff08;一&#xff09;安装docker、编辑daemon.json文件、安装docker-compose编排容器、启动docker 1.环境准备 [rootdocker--1 ~]# rz -Erz waiting to receive.[rootdocker--1 ~]# lsanaconda-ks.cfg docker.sh[rootdocker--1 ~]# source docker.sh [rootdocker--1 ~…...