OS——gcc、g++、gdb、vim、vs code的基本使用

2023-05-16

文章目录

  • g++的使用
  • gdb的使用
  • vim的使用
  • vscode的使用
    • vs code的安装
    • vs code中C++的编译运行配置

如果想要学习如何在CentOS 7中安装配置gcc、g++、gdb、zhs和oh-my-zsh,可以点击这里

g++的使用

gcc同理于g++的基本操作,只需要将所有g++命令切换成gcc并且将编译的文件换成.c后缀的即可

前文已经说明g++等的环境配置
现在开始使用vim来编写并运行一个简单的hello world

首先在桌面创建一个文件夹,然后在终端中打开这个文件夹
输入(如果不会使用vim可以参考文末)

vim hello.cpp

输入以下代码

#include <iostream>
using namespace std;

int main(){
        cout<<"hello world!!!"<<endl;
        return 0;
}

然后输入

g++ hello.cpp

或者(这种输入会遇到什么情况会在下文说明)

gcc main.c -o main.exe

g++ hello.cpp命令完成之后输入ls命令可以看到,当前文件夹下面多出来了一个a.out文件
在这里插入图片描述
在这里插入图片描述

然后输入命令

./a.out

或者

./a.out hello.cpp
# 你的cpp文件名称.cpp

可以得到
在这里插入图片描述

其他编译情况说明:
如果您输入的是gcc main.c -o main.exe则会看到

[你的用户名@centos-7 你的文件夹名字]$ ls
main.cpp  main.exe

此时同理于a.out,只需要输入

./main.exe

即可运行,并且的到相同结果!
甚至在-o后面的参数可以不加后缀,并且随意命名,比如gcc main.c -o test
编译完成之后也会产生一个test文件,并且不带后缀,此时输入

./test

即可运行,并且的到相同结果!


至此已经完成g++基本操作,经过简单的分析可以总结出:

首先我们知道一个程序的运行需要两个步骤:第一步是编译,第二步是运行,我们g++命令所做的工作就是将我们编写的程序代码给编译一边,如果编译通过了,就会生成一个a.out文件用于程序的运行,接下来只需要调用a.out就可以顺利运行了

gdb的使用

前面我们已经介绍了如何使用g++去编译运行一个简单的C程序,但是我们发现如果我们去写一个代码量比较多的程序,通过g++的编译错误提示去纠正调试,就变得非常非常的繁琐,那么有没有什么更加优雅的debug方式呢?

答案就是gdb

在安装完成gdb之后,直接在我们编写好cpp文件的文件夹下输入命令

gdb main.cpp

可以发现在提示信息的最后写有 不可识别的文件格式

在这里插入图片描述

那么如何使我们的运行文件可以被识别呢?

在编写时在gcc main.c -o main后添加上-g即可使文件被识别

在这里插入图片描述
可以看到文件路径后面的symbols是done

指令作用
(gdb) b xxxbreak 在源代码指定的某一行设置断点,其中 xxx 用于指定具体打断点的位置。
(gdb) rrun 执行被调试的程序,其会自动在第一个断点处暂停执行。
(gdb) ccontinue 当程序在某一断点处停止运行后,使用该指令可以继续执行,直至遇到下一个断点或者程序结束。
(gdb) nnext 令程序一行代码一行代码的执行。
(gdb) p xxxprint 打印指定变量的值,其中 xxx 指的就是某一变量名。
(gdb) llist 显示源程序代码的内容,包括各行代码所在的行号。
(gdb) qquit 退出

进入gdb之后可以输入以上指令进行调试,如果需要查看帮助,直接输入help即可

vim的使用

vim用于在终端中创建并编写一个文件,vi和vim操作相同,只是缺少色彩提示而已(意思就是使用vi命令去编辑一个文本,编辑的时候是黑白的,不好看)

比如我想要写一个main.cpp文件那么我需要在终端中输入

vim main.cpp

同理我也可以写一个.txt文件

vim data.txt

输入完成之后我们会进入vim编辑模式,情况类似于下图
在这里插入图片描述

此时我们不论在键盘上做任何输入,都不会输入到main.cpp中去,原因是我们还没有进入编辑模式

此时键盘输入i即可进入编辑模式

i

然后输入以下内容给.cpp文件

#include <iostream>
using namespace std;

int main(){
        cout<<"hello world!!!"<<endl;
        return 0;
}

输入完成之后在键盘上点击ESC输入

:wq

即可保存我们所编写的内容


至此我们已经完成了vim编写一个文件的基本操作,但是我们发现在使用的过程中会遇到很多其他的问题:

  • 情况一:

我们发现修改了一个不该修改的文件,或者修改错了一个文件的一些内容,但是我们并不记得原本是什么内容的了,此时键盘上点击ESC输入

:q!

此时可以强制离开vim编辑模式,并且不对我们所改写的内容进行保存

  • 情况二:

我们需要对一个只读文件进行改写,虽然我们有权限对这个文件进行读操作,但是我们的改写操作都是无效的此时我们可以先进入编辑模式(输入i)然后在改写完成之后输入

:wq!

这个命令可以强制改写文件


其他说明:

w代表:写
q代表:离开
!代表:强制
使用三者的组合可以完成我们的一些基本需求

vscode的使用

vs code的安装

如果觉得使用vim编写还是不够方便可以在centos上下载一个vs code去写代码
此处介绍如何在CentOS 7中安装vs code(一步一步ctrl cv就行了)

  1. 导入Microsoft GPG key:
sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
  1. 打开你的文本编辑器,并且创建源仓库文件,将下面的内容粘贴进去,并且启用 VS Code 源:
sudo sh -c 'echo -e "[code]\nname=Visual Studio Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/vscode.repo'


yum check-update
  1. 安装最新版本的 Visual Studio Code
sudo yum install code

打开vs code

/usr/share/code/bin/code

或者直接在用户模式下输入code也可以直接打开vs code

vs code中C++的编译运行配置

首先要保证Linux中已经安装了g++,不会安装可以查阅这篇文档

如何在vs code中编写运行一个cpp文件呢?

方法一:使用vs code提供的插件

  1. 安装插件

应用商店中搜索插件 C/C++Code Runner
安装完成之后在工作区添加一个文件夹到你指定的目录下,然后在文件夹下添加一个文件,插入以下代码

#include <iostream>
using namespace std;

int main(){
        cout<<"hello world!!!"<<endl;
        return 0;
}

然后Ctrl+S保存文件,并命名为后缀为.cpp的文件
此时可以看到右上角有一个三角形的符号(如果没有安装Code Runner插件是不会存在的)

在这里插入图片描述

点击那个三角形就可以编译运行了


方法二:

前面的步骤(安装插件、添加文件夹到工作区、创建一个cpp文件)都和方法一相同,但是不需要安装Code Runner插件

昨晚这些工作之后我们需要在文件夹下添加一个新的名为.vscode的文件夹,在这个文件夹里添加两个文件launch.jsontasks.json

将以下内容添加进入两个文件中

launch.json

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "C/C++",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}/${fileBasenameNoExtension}",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "preLaunchTask": "compile",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

tasks.json

{
    "version": "2.0.0",
    "tasks": [{
            "label": "compile",
            "command": "g++",
            "args": [
                "-g",
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}"
            ],
            "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
            }
        }
    ]
}

完成之后是这样的:

在这里插入图片描述

CODE和main.cpp是我自己命名的文件和文件夹名称

操作完成之后记得Ctrl+S进行文件的保存

然后键入F5就可以编译运行了!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OS——gcc、g++、gdb、vim、vs code的基本使用 的相关文章

  • Ros下编译某功能包时出现很多“未定义的引用”的解决方法(本人版本是ubuntu18.04)

    问题描述 xff1a 在工作空间下编译某功能包时出现 在函数 中未被定义等问题 xff0c 如图所示 解决方案 xff1a 第一步 xff1a 查看自己的gcc版本和g 43 43 版本是否一致 xff0c 打开终端输入以下命令 gcc v
  • STM32—串口通讯详解

    串口通讯目录 物理层协议层USART简介开发板与上位机的连接代码讲解 xff1a 一 初始化结构体二 NVIC配置中断优先级三 USART配置函数讲解四 传输数据的函数 xff1a 1 发送一个字节2 发送字符串3 重定向printf函数发
  • 二进制数的算术运算和逻辑运算

    算术运算 二进制数加法采用逢二进一 减法采用借一作二 十六进制数加法采用逢十六进一 减法采用借一作十六 1位八进制可以写成3位二进制 xff0c 因为3位二进制可以表示十进制范围0 7 xff0c 也就是1位八进制的表示范围 1位十六进制可
  • STM32串口接收一帧数据方法(处理一帧数据中所需内容)

    stm32支持接受单个数据或者一帧数据 xff0c 若配置单个数据接收中断的话 xff0c 会出现接收包丢包 xff0c 数据不完整的情况 xff01 因此在stm32的串口中断中 xff0c 还有一个IDLE中断 xff0c 用来产生串口
  • 使用火狐拓展插件以及运行脚本的超详细方法

    1 首先我们需要下载火狐浏览器 火狐浏览器官网 xff1a 火狐浏览器 打开后默认页面 xff1a 2 如图所示点击右上角打开菜单 xff0c 然后点击附加组件 xff1a 3 进入该页面后在搜索框输入 xff1a tampermonkey
  • static关键字在c/c++中的作用

    static关键字在c c 43 43 中的作用 static在c语言中有三个作用 xff1a 修饰函数 修饰局部变量 修饰全局变量 被static修饰的全局变量被称之为静态全局变量 静态全局变量和全局变量在存储方式上是一致的 xff0c
  • licurl API

    这个文档是小编在curl官网上使用谷歌翻译翻译的 xff0c 详细信息看官网 curl 描述 这是关于C程序中如何使用libcurl的简单概述 xff0c libcurl程序的使用需要通过以下5个方面libcurl easy libcurl
  • C语言:最大公约数详解

    C语言 xff1a 最大公约数详解 Hello xff01 小伙伴们大家好 xff0c 几天不见了 xff0c 今天给大家分享一下C语言中求最大公约数的三种方法 在开始分享前 xff0c 让我们先来看看什么是最大公约数 xff1a 最大公约
  • Java:遍历数组的三种方法

    1 for循环遍历数组 用for循环遍历数组是很常见的一种方法 xff0c Java语言中通过数组的length属性可获得数组的长度 span class token keyword package span demo span class
  • Linux:进程创建详解

    Linux xff1a 进程创建详解 进程创建1 fork函数写时拷贝调用失败的原因 2 vfork函数 进程终止正常退出的三种方法 exit和exit的区别 进程创建 现在我们已经知道进程的概念以及怎样创建一个进程 xff0c 接下来我们
  • Linux:简单理解文件系统内附Linux内核设计与实现PDF下载地址

    简单理解文件系统 文件系统ext2文件系统文件的存储文件的获取 文件系统 文件存储的方式有线性存储和离散存储两种 xff0c 线性存储可能会导致磁盘的利用率降低 xff0c 产生磁盘碎片 xff0c 离散存储方式会提高程序对磁盘的利用率 x
  • Linux:网络编程——UDP编程的前期准备

    Linux xff1a 网络编程 UDP编程的前期准备 字节序TCP与UDP的区别UDP编程的流程1 创建套接字创建套接字的意义 2 绑定地址信息 xff08 1 xff09 绑定ip和端口 xff08 2 xff09 函数 3 UDP发送
  • Xshell连接虚拟机时报错Could not connect to ‘192.168.115.133‘ (port 22): Connection failed.

    Xshell连接虚拟机时报错Could not connect to 192 168 115 133 port 22 Connection failed 今天突然想把拨号连接换成宽带连接 结果问题就来了 用下Xshell连接虚拟机的时候一直
  • Linux:简单三步,教你解决ping:www.baidu.com:未知的名称或者服务

    Linux xff1a 简单三步 xff0c 教你解决ping www baidu com 未知的名称或者服务 1 在VMware Workstation中点开编辑 xff0c 找到虚拟网络编辑器2 直接点击更改设置3 点击还原默认设置 x
  • C++:从结构体开始理解this指针

    C 43 43 xff1a 从结构体开始理解this指针 span class token macro property span class token directive keyword include span span class
  • 原来直接插入排序这么简单(附完整代码)

    原来插入排序这么简单 附完整代码 xff09 基本思想带哨兵位的插入排序二分插入排序完整代码 基本思想 做一件是之前我们总是要先知道我们做这件的核心思想 xff0c 这样会让我们做事的效率得到有效的提高 xff1b 现在我们来看看插入排序算
  • 一张图带你了解c/c++的内存分布

    c c 43 43 的内存分布 对照这些代码查看对应内存分布 xff1a span class token keyword int span globalVar span class token operator 61 span span
  • 用一个例子理解希尔排序

    用一个例子理解希尔排序 思想代码 思想 希尔排序是把序列按下标的一定增量分组 xff0c 对每组使用直接插入排序算法排序 xff1b 随着增量的逐渐减少 xff0c 每组包含的关键词越来越多 xff0c 当增量减至1时 xff0c 整个序列
  • c++ pi

    C 43 43 中表示pi的方法有两种 xff08 1 xff09 math库中利用arctan函数算出 span class token function tan span span class token punctuation spa
  • 【非数值数据的编码】西文字符和汉字的编码表示 汉字国标码、机内码详细理解

    西文字符和汉字的编码表示 西文字符概念ASCII码表特点 西文字符特点西文字符表示 xff08 常用编码为7位ASCII码 xff09 西文字符操作 汉字字符编码形式输入码字符集与汉字内码汉字的区位码汉字的国标码汉字内码 汉字的字模点阵码和

随机推荐

  • 修改centos7系统用户最大线程数和最大文件数限制

    修改centos7系统用户最大线程数和最大文件数限制 需要注意 xff0c 不同版本的Linux系统所对应的修改方法不同 ulimit 的作用 ulimit xff1a 显示 xff08 或设置 xff09 用户可以使用的资源的限制 xff
  • (已全部解决)ubantu18运行vins遇到的问题

    1 sudo rosdep init时报错 xff1a 打开hosts文件 sudo gedit etc hosts 在文件末尾添加 151 101 84 133 raw githubusercontent com 保存后退出再尝试 sud
  • ROS只使用思岚A1激光雷达进行slam建图

    使用思岚A1激光雷达 A1的ros功能包下载地址 xff1a https github com slamtec rplidar ros 因为只有激光雷达 xff0c 需要其做SLAM的话 xff0c 就需要有一个laser scan mat
  • STM32 四轴无人机的设计——基于HCSR04超声波模块的距离检测与警报设计

    1 系列总述 从现在开始将会进入四轴无人机的制作 xff0c 我是第一次制作四旋翼 xff0c 从前没有接触过这个方面 xff0c 手边的参考资料只有一本四轴的设计书和正点原子F405飞控的源码 xff0c 所以代码逻辑设计方面肯定有所欠缺
  • 【C++基础】inline与内联函数

    目录 引入 inline 关键字inline使用限制类中的成员函数与inline 引入 inline 关键字 为了解决一些频繁调用的小函数大量消耗栈空间 xff08 栈内存 xff09 的问题 xff0c 特别的引入了 inline 修饰符
  • 串口通信的基本原理详解

    目录 串口通信 串口通信的两种基本方式 异步数据的数据发送过程 异步通信的数据接收过程 9针串口 xff08 DB9 xff09 TTL与RS232区别 TTL RS232 xff1a 串口通信的数据格式 通讯方式 偶校验与奇校验 停止位
  • jeston nano安装Ubuntu镜像时启动遇到问题

    A start job is running for End user configuration after initial OEM installation 开始我跑了一下午 43 一晚上 xff0c 都没成功 xff0c 第二天 xf
  • cmake 常用变量、常用环境变量、常用语法总结

    一 cmake 变量引用的方式 前面我们已经提到了 使用 进行变量的引用 在 IF 等语句中 是直接使用变量名而不通过 取值 二 cmake 自定义变量的方式 主要有隐式定义和显式定义两种 隐式定义的例子 xff1a PROJECT 指令
  • Java基础篇:Iterator迭代器

    一 什么是Iterator xff1a 迭代器 Iterator 是一个对象 xff0c 它的工作是遍历并目标序列中的对象 xff0c 它提供了一种访问一个容器 container 对象中的各个元素的方法 xff0c 把访问逻辑从不同类型的
  • 2022-2-19 ros环境变量

    学习时间及标题 xff1a 2022 2 19 ros环境变量 学习内容 xff1a 1 添加环境变量 xff1a source span class token operator span span class token operato
  • EGO-Planner: An ESDF-free Gradient-based Local Planner for Quadrotors(论文学习)

    EGO规划器 xff1a 一种基于ESDF自由梯度的四转子局部规划器 摘要 ESDF地图被广泛运用在局部地图的梯度方向和大小估计之中 xff0c 但是由于我们在进行轨迹优化的过程中 xff0c 只用到了ESDF地图中很小的一部分 xff0c
  • cmake "undefined reference to"

    main函数在调用其他 c或 cpp文件的函数时 xff0c 有以下几种情况 函数名写错 没有将其他 c或 cpp文件链接到main o xff0c 导致main函数在执行时找不到需要调用的函数 的解决方法 修改CMakeLists txt
  • STM32串口详解

    实验一 xff1a 简单的利用串口接收中断回调函数实现数据的返回 关于串口调试助手 xff0c 还应知道 xff1a 发送英文字符需要用一个字符即8位 xff0c 发送汉字需要两个字符即16位 xff0c 如上图 xff0c 发送汉字 姜
  • RLException: [xx.launch] is neither a launch file in package [x] nor is [x] a launch file name的解决方法

    ROS学习过程中 xff0c 遇到问题 xff1a RLException xx launch is neither a launch file in package x nor is x a launch file name 出现的问题
  • numpy 中 shape 与 size 属性

    因为需要生成一个和现有矩阵大小相等的矩阵 xff0c 故查找了相关资料 span class token operator gt gt span span class token operator gt span span class to
  • Ubtuntu+C语言实现网络通信附源代码

    下面这个案例是我用C在ubtuntu上面写的网络编程案例 2 网络编程 xff08 1 xff09 OSI七层模型理想化 应用层 xff1a app xff0c 应用程序 表示层 xff1a 对数据进行加工 会话层 xff1a 建立会话 x
  • Jetson Nano的GPIO口学习

    1 配置GPIO库 https github com NVIDIA jetson gpio 1 安装pip工具 sudo apt get update sudo apt get install python3 pip sudo apt ge
  • 22.11.22 TCP与UDP 客户端与服务器 协议搭建

    ubuntu 64 ubuntu yuyu yu 11 cat Tcp Cli c 客户端 include lt stdio h gt include lt sys types h gt include lt sys socket h gt
  • cmake交叉编译配置

    cmake交叉编译配置 很多时候 xff0c 我们在开发的时候是面对嵌入式平台 xff0c 因此由于资源的限制需要用到相关的交叉编译 即在你host宿主机上要生成target目标机的程序 里面牵扯到相关头文件的切换和编译器的选择以及环境变量
  • OS——gcc、g++、gdb、vim、vs code的基本使用

    文章目录 g 43 43 的使用gdb的使用vim的使用vscode的使用vs code的安装vs code中C 43 43 的编译运行配置 如果想要学习如何在CentOS 7中安装配置gcc g 43 43 gdb zhs和oh my z