Linux开发工具使用

news2024/11/26 19:32:07

Linux开发工具使用

    • vim
      • 1.vim的基本概念
      • 2.vim三种模式的切换
      • 3.底行模式的基础操作
      • 4.命令模式下的基础操作
      • 5.vim的配置
    • yum
      • 1.yum的概念
      • 2.yum的基础操作
    • gcc/g++
      • 1.gcc/g++的概念
      • 2.一个C/C++程序形成的过程
      • 3.gcc/g++基本使用
    • make和makefile
      • 1.基础概念
      • 2.makefile
        • 【1】生成
        • 【2】清理
    • 调试器gdb
      • 1.注意
      • 2.使用

vim

1.vim的基本概念

vim是一款多模式的代码编辑器,进行代码编辑时有语法高亮。
vim具有多种模式,这里讲一下最常用的三种

  • 命令模式

vim打开文件默认的模式,控制光标的移动,配合指令来进行文本删除和复制等功能。

  • 插入模式

命令模式下按i键进入插入模式,可以做文字输入,写代码常用的模式。

  • 底行模式

命令模式下shift加:进入底行模式,输入特定字符可以进行文件保存以及退出vim。

2.vim三种模式的切换

模式切换

3.底行模式的基础操作

  • 列出行号

set nu :输入后回车列出行号。

  • 跳转到文件指定行

数字:输入一个数字后回车跳转到指定行。

  • 查找字符

/(或者?)关键字:依据关键字查找,如果第一次查找结果不符合,可以一直按n直到找到结果。
/和?的区别:/自文件第一行开始向下搜索,?是自文件最后一行向上搜索。

  • 保存文件

w:输入后回车保存文件。

  • 分屏操作

vs 文件名:文件分屏
ctrl加ww:切换操作文件(光标在哪里操作哪里)

  • 退出vim
  1. q:输入后回车退出。
  2. wq:输入后回车保存并退出。
  3. !:可以和1,2组合(q!,w!),表示强制的意思,配置系统文件的时候修改可能会拒绝保存和退出。

4.命令模式下的基础操作

  • 移动光标
  1. gg:光标定位到文件开头。
  2. shift加g:光标定位到文件结尾。
  3. n加shift加g:光标定位到文件第n行。
  4. shift加^(6):光标定位到行开始。
  5. shift加$(4):光标定位到行结尾。
  6. hjkl:左、下、上、右移动。
  • 删除文字
  1. dd(ndd):删除光标所在行(ndd一次删除n行)。
  2. x:删除光标所在字符。
  • 复制粘贴
  1. yy(nyy):复制所在行(nyy一次复制n行)。
  2. p(np):粘贴所在行(np一次粘贴n行)。
  • 替换
  1. shift加~:大小写切换。
  2. shift加r:进入替换模式(Esc退回命令模式)。
  • 撤销操作
  1. u:撤销上一次操作。
  2. ctrl加r:撤销上一次u操作。

5.vim的配置

默认vim没有代码补全这样的功能,需要自己配置。
配置文件是.vimrc,用户目录下没有这个文件就自己创建一下,然后进行配置。
大家可以自己搜索一下配置选项,我这里直接给一下C/C++的一键配置,VimForCpp,按照安装方法来就行。

yum

1.yum的概念

yum是一个软件包管理器,软件包就是App,yum就像手机里面的应用市场一样,不一样的是yum可以自己配置下载源(告诉yum去哪里下载)。

2.yum的基础操作

  • 查找

yum lsit | grep 关键字:使用管道加行过滤,把含关键字的软件列出来,没有找到就查一下下载方式。

  • 安装

sudo yum install -y 软件名:安装和卸载都需要root的权限,加-y选择不会询问是否安装。

  • 卸载

sudo yum remove -y 软件:卸载软件

gcc/g++

1.gcc/g++的概念

gcc、g++是编译器,其中gcc负责编译C语言,g++负责编译C++。除此以为gcc和g++还有链接的功能。

2.一个C/C++程序形成的过程

一个C/C++程序的形成需要经过预处理、编译、汇编、链接

  1. 预处理:进行宏的替换、头文件展开、注释的删除(空格替换)。
  2. 编译:将代码转化为汇编代码(这个阶段主要负责语法分析、符号汇总、 词法分析、 语义分析)。
  3. 汇编:将汇编代码转化为二进制机器指令,生成符号表。
  4. 链接:汇编完成后会把对应源文件生成目标文件,链接阶段就是把这些目标文件进行链接。

程序的生成

3.gcc/g++基本使用

  • 格式

gcc [选项] 要编译的文件 [选项] [目标文件]

  • 直接形成可执行程序

gcc/g++ hello.c -o hello
注意:-o选项用于指定生成的可执行文件的名称。这个选项后面需要跟上一个文件名作为参数,不加-o选项的话自动生成。

  • 预处理(进行宏替换,条件编译)

gcc -E hello.c -o hello.i
注意:“.i”文件为已经过预处理的C原始程序。

  • 编译(生成汇编代码)

gcc –S hello.i –o hello.s

  • 汇编(生成二进制机器码)

gcc –c hello.s –o hello.o

  • 链接(生成可执行程序)

gcc hello.o –o hello

  • gcc其它选项
  1. -g 生成调试信息。GNU 调试器可利用该信息。
  2. -w 不生成任何警告信息。

make和makefile

1.基础概念

make是一条命令,makefile是一个文件,这两者组合可以用来自动化构建项目。makefile包含文件编译顺序的信息,make会依据makefile中的信息生成或清理程序。在面对多文件开发的时候只需要简单的一条指令就能一键生成程序或清理。

2.makefile

makefile的两个重点分别是依赖关系加依赖方法,直白一点就是目标需要的文件以及对应的生成指令。

【1】生成

我们用vim打开一个makefile文件:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上面这个例子只是为了进行讲解,实际单文件只需要下面这种写法就可以:
在这里插入图片描述


完成makefile的编写后,我们直接运行make指令:
在这里插入图片描述

【2】清理

在这里插入图片描述
我们输入make clean指令:
在这里插入图片描述

调试器gdb

1.注意

  • 程序的发布方式有两种,debug模式和release模式。
  • Linux gcc/g++出来的二进制程序,默认是release模式。
  • 要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项。

2.使用

gdb的功能很多,这里列出常用功能。

  • gdb DeBug程序:开始调试
  • quit:退出
  • list/l:显示binFile源代码,接着上次的位置往下列,每次列10行。
  • list/l 函数名:列出某个函数的源代码。
  • r或run:运行程序。
  • n或next:单条执行。(逐过程)
  • s或step:进入函数调用。(逐语句)
  • break(b) 行号:在某一行设置断点。
  • break 函数名:在某个函数开头设置断点。
  • info break :查看断点信息。
  • finish:执行到当前函数返回。
  • print(p):打印表达式的值,通过表达式可以修改变量的值或者调用函数。
  • p 变量:打印变量值。
  • continue(或c):从当前位置开始连续而非单步执行程序
  • delete breakpoints:删除所有断点
  • delete breakpoints n:删除序号为n的断点
  • disable breakpoints:禁用断点
  • enable breakpoints:启用断点
  • display 变量名:跟踪查看一个变量,每次停下来都显示它的值
  • undisplay:取消对先前设置的那些变量的跟踪。
  • breaktrace(或bt):查看各级函数调用及参数
  • info(i) locals:查看当前栈帧局部变量的值

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

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

相关文章

2023国际高校数学建模竞赛B题三星堆文物原创论文讲解

大家好呀,从昨天发布赛题一直到现在,总算完成了国际高校数学建模竞赛B题完整的成品论文。 本论文可以保证原创,保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊弄人的垃圾半成品论文。 B题论文共28页,一些…

docker php 容器安装redis和mongodb扩展

一、背景 很多项目(几乎所有)都有用到redis和mongodb来存储数据,php没有自带这些扩展,需要手动安装 二、PHP redis扩展安装步骤 这里以php8.2版本容器为例,以下命令中‘php82’均为容器名称,需要更换为你自己的实际名称&#x…

JZ31 栈的压入、弹出序列-C++

题目来源:牛客网 题目描述: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列…

List如何正确删除元素

public static void main(String[] args) {List<Integer> list Lists.newArrayList(1, 2, 3, 4, 5);list.forEach(item -> {if (item 3) {list.remove(3);}});} 使用foreach删除集合元素的时候&#xff0c;有可能会报错&#xff0c;报错信息如下&#xff1a; 这是因…

【docker】docker

目录 一、docker概念二、docker安装(centos7)三、docker架构3.1 镜像image3.2 容器container 四、配置docker镜像加速器五、docker命令5.1 docker服务命令5.2 docker镜像命令5.3 docker容器命令 六、docker容器的数据卷6.1 容器卷概念及作用6.2 配置数据卷6.3 挂载示例6.4 数据…

【Linux】多线程概念理论

目录 1 什么是线程&#xff1f; 2 线程的优点 3 线程的缺点 4 线程异常 5 线程用途 6 Linux线程和进程对比 1 什么是线程&#xff1f; 在一个程序里的一个执行路线就叫做线程&#xff08;thread&#xff09;。更准确的定义是&#xff1a;线程是“一个进程内部的控制序列…

【ARMv8 SIMD和浮点指令编程】NEON 移位指令——左右移位之术

NEON 移位指令主要涉及逻辑移位、算术移位两大类,同时下面还介绍了两个移位插入指令。 一、逻辑移位 1.1 SHL 左移(立即数)。该指令从向量中读取每个值,将每个结果左移一个立即值,将最终结果写入向量,并将向量写入目标 SIMD&FP 寄存器。 标量 SHL <V><d…

hive之存储优化

从这里开始就是hive调优阶段&#xff0c;怎么让hive跑的更快。 分区表和分桶表都是从存储方向进行优化。 目录 分区表&#xff1a; 概念&#xff1a; 代码&#xff1a; load填充数据&#xff1a; insertselect填充数据&#xff1a; 需求&#xff1a; 分区表基本操作 (一)…

vue3自定义日历

原理 现在的日历分为两种开头&#xff1a; 1. 日, 一, 二, 三, 四, 五, 六 2. 一, 二, 三, 四, 五, 六, 日一行7个日期&#xff0c;一共6行 其实不管哪种都一样&#xff0c;首先要确定第一行1号在哪个位置。 如果说是 日, 一, 二, 三, 四, 五, 六&#xff0c;那么getDay()是几…

了解Unity编辑器之组件篇UI(一)

UI组件&#xff1a;提供了用户交互&#xff0c;信息展示&#xff0c;用户导航等功能 一、Button&#xff1a;用于响应用户的点击事件 1.Interactable&#xff08;可交互&#xff09;&#xff1a;该属性控制按钮是否可以与用户交互&#xff0c;如果禁用则按钮无法被点击。可以通…

为什么TM服务器要安装php~

"想像力比知识更重要。因为知识是有限的&#xff0c;而想像力是无限&#xff0c;它包含了一切&#xff0c;推动着进步&#xff0c;是人类进化的源泉。 -- 爱因斯坦 为什么服务器要安装php~ 服务器为什么安装PHP (2023年) 导读&#xff1a;今天来给各位分享关于服务器为什么…

List有值二次转换给其他对象报null

List<PlatformUsersData> listData platformUsersMapper.selectPlatformUserDataById(data); users.setPlatformUsersData(listData);为什么listData 有值&#xff0c;users.getPlatformUsersData&#xff08;&#xff09;仍然为空在这段代码中&#xff0c;我们假设listD…

初识C++ ------ 引用、内联函数、auto关键字、基于范围的for循环、指针空值

文章目录 引用特点引用和指针的区别 内联函数概念 auto 关键字基于范围的for循环指针空值 nullptr &#xff08;C11&#xff09; 引用 特点 传引用返回&#xff1a;提高了效率&#xff0c;可以修改返回对象&#xff0c;传引用传参&#xff1a;提高效率&#xff0c;输出型参数。…

解密动态内存管理的奥秘(含内存4个函数)

目录 一.为什么存在动态内存管理 二.动态内存函数的介绍 1. malloc函数&#xff08;memory alloc 内存开辟&#xff09; 函数介绍&#xff1a; malloc函数使用举例代码&#xff1a; 2.free&#xff08;释放&#xff09; 函数介绍&#xff1a; 代码的示例&#xff1a…

Linux 网络通信epoll详解( 10 ) -【Linux通信架构系列 】

系列文章目录 C技能系列 Linux通信架构系列 C高性能优化编程系列 深入理解软件架构设计系列 高级C并发线程编程 期待你的关注哦&#xff01;&#xff01;&#xff01; 现在的一切都是为将来的梦想编织翅膀&#xff0c;让梦想在现实中展翅高飞。 Now everything is for the…

《网络是怎样连接的》(二.1)

(83条消息) 《网络是怎样连接的》&#xff08;一&#xff09;_qq_38480311的博客-CSDN博客 本文主要取材于 《网络是怎样连接的》 第二章。 目录 &#xff08;1&#xff09;创建套接字 &#xff08;2&#xff09;连接服务器 &#xff08;3&#xff09;收发数据 &#xf…

文本预处理——文本处理的基本方法

目录 什么是分词jieba分词特性精确模式分词全模式分词搜索引擎模式分词使用用户自定义词典 命名实体识别词性标注 什么是分词 jieba分词特性 精确模式分词 import jieba content工信处女干事每月经过下属科室都要亲口交代24口交换机等技术性器件的安装工作 print(jieba.lcut(co…

《零基础入门学习Python》第055讲:论一只爬虫的自我修养3:隐藏

0. 请写下这一节课你学习到的内容&#xff1a;格式不限&#xff0c;回忆并复述是加强记忆的好方式&#xff01; 上节课我们说过了&#xff0c;有一些网站比较痛恨爬虫程序&#xff0c;它们不喜欢被程序所访问&#xff0c;所以它们会检查链接的来源&#xff0c;如果说来源不是正…

ONGUI

public class ONGUI : MonoBehaviour {private void OnGUI() {GUI.Label(new Rect(0,0,100,250),"ONGUI");} }说明是以左上角为原点来算的

Spring Cloud【服务网关Gateway(三大核心概念、入门案例、路由规则 、Java API构建路由、动态路由、断言功能详解)】(六)

目录 服务网关Gateway_三大核心概念 服务网关Gateway_入门案例 服务网关Gateway_路由规则 服务网关Gateway_Java API构建路由 服务网关Gateway_动态路由 服务网关Gateway_断言功能详解 服务网关Gateway_三大核心概念 路由(Route) 这是网关的基本构建块。它由一个ID&am…