vscode是文本编辑而非集成开发环境,需要经过配置才能在其上编译执行代码。本教程将具体详解在linux上配置Visual Studio Code使用GCC C++ 编译器(g++)和GDB调试器的方法(GCC是GNU 编译器集合,GDB则是 GNU调试器)。 配置vscode后,将通过在VSCode中编译和调试一个简单的 C++程序告知您具体该如何操作。

一、先决条件

  1. 安装Visual Studio Code.
  2. 安装C++拓展。点击在vscode界面最左侧的Extensions图标(打开快捷键:ctrl+shift+X),搜索“C/C++”,点击进行安装。(所有三个c/c++相关的全部安装)

检查是否安装了gcc编译器(终端输入gcc -v)如果能够正确打印出当前gcc的版本信息,则表示已经预装。若没有预装,则用如下命令安装安装 GNU 编译器工具和 GDB 调试器:

sudo apt update # 更新软件包源 
sudo apt-get install build-essential gdb

二、配置相应环境

项目的配置文件位于.vscode文件夹下。在后续教程中,将具体说明在vscode中如何操作生成.vscode 文件夹下的三个配置文件:

tasks.json (compiler build settings) ,负责编译
launch.json (debugger settings),负责调试

c_cpp_properties.json (compiler path and IntelliSense settings),负责更改路径等设置

当然,也可以直接复制配置文件中的内容,以新建文件的方式生成配置文件。后续会对文件中的一些重要关键字进行解读,了解配置文件中内容的具体作用。

2.1 编译 Build
创建 tasks.json

在.vscode下创建tasks.json文件,它的作用是告诉 VS Code 如何构建(编译)程序,将调用 g++编译器从源代码创建一个可执行文件。 在上方的主菜单中,选择 Terminal>Configure Default Build Task ,将出现一个下拉菜单,显示 C++ 编译器的各种预定义编译任务。选择 C/C++: g++ build active file

上述操作将自动在.vscode文件夹下生成tasks.json文件。当然也可以在Explorer视图中新建文件,将下面代码复制进去,手动生成tasks.json,教程后面的配置文件也均可这样生成。其中代码类似如下:

{"tasks": [{"type": "cppbuild","label": "C/C++: g++ build active file","command": "/usr/bin/g++","args": ["-fdiagnostics-color=always","-g",// "${file}","${workspaceFolder}/*.cpp","-o","${fileDirname}/a.out"],"options": {"cwd": "${fileDirname}"},"problemMatcher": ["$gcc"],"group": {"kind": "build","isDefault": true},"detail": "调试器生成的任务。"},],"version": "2.0.0"
}

注: VScode支持使用 ${variableName} 语法在配置文件中实现键值字符串的变量替换。tasks.json及后面为调试创建的launch.json文件中变量的具体说明可参考variable reference.

tasks.json中部分关键字说明:

command: 要运行的程序,此处是g++。

args: args 数组包含将传递给 g++ 的命令行参数(必须按照编译器预期的顺序指定)。"${file}"表示当前打开的待编译的活动文件,对它进行编译,并在当前路径${fileDirname}生成与活动文件同名无后缀的可执行文件"${fileDirname}/${fileBasenameNoExtension}"。在本案例中活动文件指helloworld.cpp,所生成的可执行文件为helloworld。

label: 标签值是将在任务列表中看到的内容;可以随意命名它。

group中的isDefault: 值为true表示支持通过快捷键ctrl+shift+B来执行该编译任务。如果值改为false,也可以从菜单中选择运行:Terminal>Run Build Task。

修改tasks.json

可以修改 tasks.json来满足一些特定需求。比如 将"${file}"替换“${workspaceFolder}/*.cpp”来构建多个 C++ 文件; 将“${fileDirname}/${fileBasenameNoExtension}”替换为硬编码文件名(如“helloworld.out”)来修改输出文件名。

2.3 调试Debug
创建launch.json

launch.json 文件用于在 Visual Studio Code 中配置调试器。接下来将创建launch.json 文件。

从主菜单中,选择 Run > Add Configuration...,选择C++ (GDB/LLDB)。 之后将看到展示各种预定义调试配置的下拉列表,选择 g++ build and debug active file。将自动生成launch.json文件。

在编辑器中打开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": "g++ - Build and debug active file","type": "cppdbg","request": "launch","program": "${fileDirname}/a.out","args": [],"stopAtEntry": false,"cwd": "${fileDirname}","environment": [],"externalConsole": false,"MIMode": "gdb","setupCommands": [{"description": "Enable pretty-printing for gdb","text": "-enable-pretty-printing","ignoreFailures": true}],"preLaunchTask": "C/C++: g++ build active file","miDebuggerPath": "/usr/bin/gdb"}]
}

这里千万要确保task.json中的“-o”参数与launch.json中的program参数相同

task.json中的“label”参数与launch.json中的preLaunchTask参数相同

下面自己就可以写一个hello world程序玩玩啦!

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【EGSR2025】材质+扩散模型+神经网络相关论文整理随笔

MatSwap: Light-aware material transfers in images 介绍任务:输入一张拍摄图像、示例材质纹理图像(这里跟BRDF无关,通常我们讲到材质一般指的是SVBRDF,但是这里的材质指的只是纹理)、用户为拍摄图像指定的遮罩区域&…

WebRTC 双向视频通话

WebRTC 双向视频通话 一、项目概述 WebRTC(Web Real - Time Communication)是一种支持浏览器之间进行实时通信的技术,它使得在网页上实现音视频通话、文件共享等功能变得更加容易。为了体验这个技术,所以我实现了webrtc - local…

Paimon lookup核心过程:分级查找、二分和缓存创建

LookupLevels LookupLevels 在 Paimon 中扮演着**“带缓存的、基于 Key 的数据查找引擎”**的角色。它的核心使命是:当需要根据主键(Key)查找某条数据时,能够高效地在 LSM-Tree 的多层(Levels)数据文件中定…

Ruby大会演讲实录:Baklib 如何用 AI 重构内容管理赛道

“2015 年成都 Ruby 大会时,我们还在做大数据项目;2025 年的今天,Baklib 已服务 800 多家企业。” 在 RubyConf China 2025 的演讲台上,Baklib 创始人Song以十年对比开篇,讲述了从技术爱好者到企业服务创业者的蜕变&am…

408第三季part2 - 计算机网络 - 传输层II

理解第一次和第二次握手是不能携带数据,只能消耗一个序号后面挥手也有第一次和第三次题目建立连接是1000,FIN挥手是5001,这两个是不会带数据的所以字节数范围是1001-50005000-10011 4000c再次理解还可以叫快速重传题目服务器想要100确认号客…

揭秘图像LLM:从像素到语言的智能转换

图像LLM是怎么工作 图像LLM(多模态大语言模型)的核心是将图像转化为语言模型能理解的“语言”,并与文本深度融合。以下结合CLIP、DALL-E、GPT-4V等主流模型,通过具体例子说明其工作机制: 一、图像→特征向量:从像素到“密码” 例子:识别“戴墨镜的猫” 视觉编码器提取…

十、K8s集群资源合理化分配

十、K8s集群资源合理化分配 文章目录 十、K8s集群资源合理化分配1、K8s 资源限制 ResourceQuota1.1 什么是ResourceQuota?1.2 ResourceQuota通常用于如下场景:1.3 基于租户和团队的资源限制1.4 基于命名空间的资源限制 2、K8s 资源限制 LimitRange2.1 设…

Android 13 设置界面会判断当前屏幕的大小,如果是大屏,则为左右屏显示

1.前言 在13.0的系统rom定制化开发中,在某些时候,在大屏设备中,设置新增了左右分屏的功能,就是 左边显示主菜单,右边显示一级菜单的功能,某些情况下不需要,接下来关闭这个功能 2.设置界面会判断当前屏幕的大小,如果是大屏,则为左右屏显示的核心类 packages/apps/Sett…

算法学习day15----蓝桥杯--进制转换

python代码:def jinzhizhuanhuan(x, n):ans 0while x > 0:ans x % nx // nreturn ans sum 0 for i in range(1, 2025):if jinzhizhuanhuan(i, 2) jinzhizhuanhuan(i, 4):sum 1 print(sum)虽然结束了期末周,但是又变懒了不少,水一个先…

OpenStack扩展

一、OpenStack (开源云计算管理平台)的核心服务组件及功能计算服务(Compute - Nova)功能:是 OpenStack 计算资源管理的核心组件,负责虚拟机实例全生命周期管理,像实例的创建、启动、暂停、迁移、…

【LeetCode 热题 100】41. 缺失的第一个正数——(解法二)原地哈希

Problem: 41. 缺失的第一个正数 题目:给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 【LeetCode 热题 100】41. 缺失的第一个正数——(解法一&am…

C#上位机之Modbus通信协议!

文章目录前言一、Modbus概念二、使用步骤1.使用Modbus准备2.使用步骤三、Modbus RTU 与 Modbus ASCII对比前言 Modbus通信协议! 一、Modbus概念 从站设备编码(从站地址、单元ID),一主多从。 存储区:0-线圈状态、1-输…

前后端分离架构下的跨域问题与解决方案

在现代Web开发中,特别是随着前后端分离架构的普及,跨域问题成为了开发者必须面对的一个重要议题。本文将详细介绍什么是跨域问题、其产生的原因以及如何从前端和后端两个角度来解决这个问题,并提供一些实用的代码示例。一、跨域问题概述1. 定…

搜索数据建设系列之数据架构重构

导读 主要概述百度搜索业务数据建设的创新实践,重点围绕宽表模型设计、计算引擎优化和新一代业务服务交付模式(图灵3.0开发模式)三大方向,解决了传统数仓在搜索场景下面临的诸多挑战,实现了搜索数据建设的高效、稳定、…

2025年渗透测试面试题总结-2025年HW(护网面试) 29(题目+回答)

安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。、 目录 2025年HW(护网面试) 29 1. 样本分析思路 2. Linux GDB分析样本示例 3. 应急案例:WebShell后…

动态编程入门第二节:委托与事件 - Unity 开发者的高级回调与通信艺术

动态编程入门第一节:C# 反射 - Unity 开发者的超级工具箱 动态编程入门第二节:委托与事件 - Unity 开发者的高级回调与通信艺术 上次我们聊了 C# 反射,它让程序拥有了在运行时“看清自己”的能力。但光能看清还不够,我们还需要让…

降低网络安全中的人为风险:以人为本的路径

有效降低网络安全中的人为风险,关键在于采取以人为本的方法。这种方法的核心在于通过高效的培训和实践,使员工掌握安全知识、践行安全行为,并最终培育出安全且相互支持的文化氛围。 诚然,技术和政策必须为良好的安全行为提供支持、…

opencv裁剪和编译

opencv裁剪和编译 0. 准备工作 0.1 下载和安装Eigen 地址 https://eigen.tuxfamily.org/index.php?titleMain_Page对于opencv编译,需要增加EIGEN_INCLUDE_PATH和开启WITH_EIGEN -DWITH_EIGENON -DEIGEN_INCLUDE_PATH./3rd/eigen-3.4.01. 实际脚本 编译脚本如下: ch…

小白成长之路-mysql数据基础(三)

文章目录一、主从复制二、案例总结一、主从复制 1、master开启二进制日志记录2、slave开启IO进程,从master中读取二进制日志并写入slave的中继日志3、slave开启SQL进程,从中继日志中读取二进制日志并进行重放4、最终,达到slave与master中数据…

通过 Windows 共享文件夹 + 手机访问(SMB协议)如何实现

通过 Windows 共享文件夹 手机访问(SMB协议) 实现 PC 和安卓手机局域网文件共享,具体步骤如下: 📌 前置条件 电脑和手机连接同一局域网(同一个Wi-Fi或路由器)。关闭防火墙或放行SMB端口&#…