Linux:工具(vim,gcc/g++,make/Makefile,yum,git,gdb)

目录

---工具功能

1. vim

1.1 vim的模式

1.2 vim常见指令

2. gcc/g++

2.1 预备知识

2.2 gcc的使用

3.make,Makefile

make.Makefile的使用

4.yum

--yum三板斧

5.git

--git三板斧

--Linux下提交代码到远程仓库

6.gdb

6.1 gdb的常用指令


学习目标:

1.知道这些工具的功能

2.掌握这些工具的基本使用

---工具功能

编写代码         -- vim

编译代码         -- gcc ,g++

调试代码         -- gdb

代码管理         -- git

运行/自动化构建程序 --make/Makefile

1. vim

1.1 vim的模式

1.命令行模式  2.编辑模式   3.低行模式

1.2 vim常见指令

--默认打开

1.命令模式(默认打开的模式)

--输出 i 即可写代码 (编辑/插入模式)

--回到命令模式:按Esc

--退出:在命令模式当中输出shift + :

-w 保存 -q 退出 -wq 保存并退出 -!强制

--命令行模式指令

--编辑

  • yy:将当前光标所在的行,复制                  nyy(n表示具体的数字)
  • p:将复制行进行粘贴                                  np
  • dd:将当前光标所在的行,剪切(删除)   ndd(删除/剪切n行)
  • u:撤销历史操作
  • ctrl + r :撤销u操作
  • shift + ~ :大小写切换
  • shift + r:替换(进入替换模式)
  • r:替换光标所在的字符,支持nr
  • x or X(shift + x):删除光标所在的字符,包括之前或者之后 支持nx

--光标移动

  • gg:光标定位到文件的最开始
  • shift + g :光标定位到文件的结尾
  • n + shift + g :光标定位到文件的任意行
  • shift + 6(^):光标定位到当前行的最开始(上)
  • shift + 4 ($):光标定位到当前行的最结尾(下)
  • w,b:以单词为单位进行光标的前后移动(左右)
  • h左,j下,k上,l 右

--底行模式

  • set nu/nonu :调出行号,或者取消行号
  • vs 文件名 :分批操作
  • w:写入,w!(强制)
  • q:退出, q!(强制)
  • ctrl + ww :光标跳转
  • !  +  cmd:不退出vim执行对应的指令(执行命令,编译,运行,查看man手册)

示例:

--set nu/nonu :调出行号,或者取消行号

set nu/nonu   显示/取消行号

--vs 文件名 :分批操作

vs  +  文件名     分批操作

--ctrl + ww :光标跳转

ctrl + ww    //光标跳转

-- !  +  cmd:不退出vim执行对应的指令

! man 3 printf

2. gcc/g++

2.1 预备知识

gcc是一个专门编译链接C语言的编译器 g++(C++)

一、程序翻译过程:

文本的C -->计算机二进制

  • 1.预处理:(a.去注释 b.宏替换 c.头文件展开 d.条件编译)
  • 2.编译(C ->汇编)
  • 3.汇编(汇编 -> 可重定向二进制目标文件)
  • 4.链接(链接 -> 多个.o ,.. ,.obj ->合并成一个可执行).exe

(gcc/g++ 也要遵守)


二、动静态库 --- (感性的认识)

  • 动态链接:将库中我要的方法地址,填入到我们的可执行程序中,建立关联(节省资源)
  • 静态链接:将库中方法的实现,拷贝到我们的可执行程序中

一般链接的过程,两种方式:

a.动态链接         -         需要动态库

b.静态链接         -         需要静态库

Linux: .so(动态库) .a(静态库)

windows: .dll(动态库) .lib(静态库)

注:gcc和g++默认形成的可执行程序是动态链接的

2.2 gcc的使用

gcc 文件名 -o 新生成的文件名

其它选项:

  • gcc -E mytest.c -o mytest.i (预处理)开始翻译直到预处理完成
  • gcc -S mytest.i -o mytest.s (编译)开始翻译直到编译完成
  • gcc -c mytest.s -o mytest.o (汇编)开始翻译直到汇编完成
  • gcc mytest.o -o mytest.o (链接)  (mytest.o 可重定向目标文件)

示例:

gcc test2.c -o test2

3.make,Makefile

make.Makefile的使用

1.make && makefile

make是一个命令

makefile是一个文件

--使用

touch Makefile         建立Makefile文件

vim Makefile             编写Makefile(a.依赖关系 b.依赖方法)

mytest:test.c (依赖关系)gcc test.c -o mytest (依赖方法).PHONY:clean(伪目标)
clean:rm -f mytest       

调用:

make (构建)
make clean (清理)

makefile指令是从上到下扫描的

注:clean 总是被执行的:总是会根据依赖放关系,执行依赖方法

--在上面的例子里,可以重复执行clean,但不能重复执行mytest(没被.PHONY修饰)

        --你在Makefile中定义一个目标,与当前目录中存在同名的文件时,Make会默认认为这个目标是一个文件,并尝试根据文件的时间戳来判断是否需要重新构建。

提问:makefile是如何知道我的文件是最新的?

--根据最新的修改时间

示例:

1.创建Makefile

touch Makefile

2.编写Makefile

vim Makefile

3.调用:根据写好的Makefile自动生成可执行文件,并进行清理:

make     //构建

make clean  //清理

--可以重复执行make clean(其被.PHONY修饰)

通过使用.PHONY,告诉Make,这个目标是伪目标,不要期望生成一个同名文件,只需执行其中定义的命令。

4.yum

--yum三板斧

1.yum list 列出能下的软件

--yum list | grep sl (将所有包含sl文件的名称显示出来)

2.yum install

-- sudo yum install -y                 安装软件(-y表示默认认可,不需要再问用户)

3. yum. remove 你的软件         移除软件(一般要加sudo)

5.git

--说明

git用于管理代码,git的精华:多人协作开发,(学习阶段,大多数自己写代码,暂不涉及

下面说明怎么使用git提交代码到自己的远程仓库

--git三板斧

正常情况:

  • git add 你的文件 #添加我们的代码到本地仓库
  • git commit -m "这里必须写提交日志"
  • git push

其它情况:

  • 1.git log #查看提交记录
  • 2.git pull #同步仓库
  • 3.git rm 文件 #删除本地仓库的文件

删除本地仓库文件后,再git commit -m " 日志" git push

远程仓库里的文件会被删除

--.gitignore # 不想提交某些后缀的文件同步到远端的git仓库,就可以添加到.gitignore

修改本地仓库文件后,再add,commit,push就能将远程仓库的文件修改

--若出现提交失败,可能是仓库未同步,git pull再提交

--Linux下提交代码到远程仓库

配置环境:

第一次提交需要输入下面的指令:

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

这两个自行输入即可(这个是用来说明你是谁的,git支持多人协作,查看日志的时候可以看到是谁提交的代码)

在克隆仓库/提交代码的时候,应该会让你输入你gitee的账号名和密码(根据它的提升输入即可)

1.在Linux环境下输入:git clone 仓库网址

这里可以看到就把仓库克隆过来了

git仓库就是.git 文件

2.使用三板斧提交写好的文件就行:

git add test.cgit commit -m "提交测试"git push

这里push后要求输入gitee的用户名和密码

然后就把写好的文件提交到远程仓库了

6.gdb

6.1 gdb的常用指令

gdb 文件名 (调试)

  •  l 0                                  --从第0行开始显示代码
  • r                                      --开始调试,如果没有设置断点,就直接运行结束
  • b 行数                             --打断点 (会形成断点编号,可用info查看)
  • info b                               --查看断点
  • d 断点编号                      --删断点
  • disable 断点编号            --使能(打开)
  • enable 断点编号             -- 关闭
  • p 变量名                          --打印变量内容:
  • n                                      --逐过程 (相当于vs中的F10)
  • s                                      --进入函数(相当于vs中的F11)
  • bt                                     --查看当前调用的堆栈
  • finish                                --函数跑完就停下
  • display 名称                     --设置常显示
  • undisplay 编号                 --取消常显示
  • until 行数 (不建议)      --跳到指定行数
  • c                                      --运行到下一个断点出就停下来
  • quit                                  --退出

补充:

--gdb会记录最近一条命令,如果命令无变化,可以直接回车

修改特定变量:set var 变量 = 数值(vs中监视窗口,可以给变量赋值查看)

示例:

因为gcc,g++默认形成的可执行程序式release的,所以无法直接调试

解决:使用gcc编译的时候,添加-g 选项,将其改为debug方式发布

我写了一个打印1-100的和的文件,现在对其调试

先编译,生成debug版本的运行文件

 gcc  test.c  -o   test -g   //生成Debug版gdb  test

-- l  0 (从第0行开始显示代码)

--打断点: b 行数

--查看断点 info b

--删断点 d 断点编号

--打印变量内容: p 变量名

--逐过程 n (相当于vs中的F10)

--进入函数 s (相当于vs中的F11)

--查看当前调用的堆栈 bt

--函数跑完就停下 finish

--设置常显示 display 名称

--取消常显示 undisplay 编号

--运行到下一个断点出就停下来 c

这里我打了两个断点:(17,19行)

使用c后直接跳转到下一个断点19

补充:

gcc和g++默认形成的可执行程序是动态链接的

gcc,g++默认形成的可执行程序式release的,所以无法直接调试

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

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

相关文章

Android jni引用第三方so动态库和.a静态库并且调用(c)方法

最近花了一周时间来入门学习 Android JNI方面的知识,因为后续的工作很多需要用到c c++库,我需要用jni来包装一下c函数,来提供给上次java调用。总之多学点知识对自己有好处。 案例效果: 上文我们讲解了 android studio cmake生成.a文件(静态库)及调用(c c++)静态库.a 本文…

java网络编程,套接字socket

目录 一 网络概述 二 网络的类型分类 三 网络体系结构 四 网络通信协议概述 五 网络通信协议种类 六 Socket简介 七 Socket路径 八 java网络编程三要素 九 基于UDP协议的Socket编程 十 基于TCP协议的Socket编程 十一 基于TCP协议和UDP的区别 一 网络概述 多台相互连…

Python网络编程详解

概要 Python作为一种强大的编程语言,拥有丰富的网络编程库和框架,能够方便地进行各种网络编程任务。本文将介绍Python网络编程的基础知识,包括socket编程和HTTP协议,然后深入探讨一些流行的Python Web框架,包括Flask和…

安卓绘制原理概览

绘制原理 Android 程序员都知道 Android 的绘制流程分为 Measure、Layout、Draw 三步骤,其中 Measure 负责测量 View 的大小Layout 负责确定 View 的位置Draw 负责将 View 画在屏幕上 由 ViewRootImpl 实现的 performTraversal 方法是 Measure、layout、draw 的真正…

2023高教社杯数学建模C题思路代码 - 蔬菜类商品的自动定价与补货决策

# 1 赛题 在生鲜商超中,一般蔬菜类商品的保鲜期都比较短,且品相随销售时间的增加而变差, 大部分品种如当日未售出,隔日就无法再售。因此, 商超通常会根据各商品的历史销售和需 求情况每天进行补货。 由于商超销售的蔬菜…

jemalloc 5.3.0源码总结

注意:jemalloc 的最新版本里没有所谓的 huge class,bin 中slab外面也不再套一个run的概念了,看其它人分享的文章时需要注意。 简述 用户侧通过 tcache 来访问,tcache 是一个线程的申请又释放的对象的缓存,它绑定了一…

Jenkins 持续集成:Linux 系统 两台机器互相免密登录

背景知识 我们把public key放在远程系统合适的位置,然后从本地开始进行ssh连接。 此时,远程的sshd会产生一个随机数并用我们产生的public key进行加密后发给本地,本地会用private key进行解密并把这个随机数发回给远程系统。 最后&#xf…

RHCA之路---EX280(6)

RHCA之路—EX280(6) 1. 题目 Create an application greeter in the project samples which uses the Docker image registry.lab.example.com/openshift/hello-openshift so that it is reachable at the following address only: https://greeter.apps.lab.example.com (Not…

分布式 - 服务器Nginx:基础系列之Nginx静态资源配置优化sendfile | tcp_nopush | tcp_nodelay

文章目录 1. sendfile 指令2. tcp_nopush 指令3. tcp_nodelay 指令 1. sendfile 指令 请求静态资源的过程:客户端通过网络接口向服务端发送请求,操作系统将这些客户端的请求传递给服务器端应用程序,服务器端应用程序会处理这些请求&#xff…

PaddleOCR训练部署文档

Cuda安装 wget https://developer.download.nvidia.com/compute/cuda/11.6.0/local_installers/cuda_11.6.0_510.39.01_linux.run sh cuda_11.6.0_510.39.01_linux.run#可能会报错,查看/var/log/nvidia-installer.log ,kill -9 [ID]可以解决vim ~/.bash…

Linux:tomcat (源码包安装)(官网下载-安装-启动-配置-等等等-----从入门到入土)

介绍 Apache Tomcat软件是一个开源实现 Jakarta Servlet、Jakarta Server Pages、Jakarta Expression Language、Jakarta WebSocket、Jakarta Annotations 和 Jakarta Authentication 规范。 这些规范是Jakarta EE平台的一部分。 Apache Tomcat软件是在开放和参与式中开发的。 …

基于SSM的学校运动会信息管理系统

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

网络协议从入门到底层原理学习(一)—— 简介及基本概念

文章目录 网络协议从入门到底层原理学习(一)—— 简介及基本概念一、简介1、网络协议的定义2、网络协议组成要素3、广泛的网络协议类型网络通信协议网络安全协议网络管理协议 4、网络协议模型对比图 二、基本概念1、网络互连模型2、计算机之间的通信基础…

洞察商机,驱动创新:智能数据分析引领企业发展

“五度易链”产业大数据解决方案由产业经济、智慧招商、企业服务、数据服务四大应用解决方案组成,囊括了产业经济监测、产业诊断分析、企业监测预警、企业综合评估、大数据精准招商、招商智能管理、企业管理、企业培育、企业市场服务、企业金融服务、产业数据开放服…

智慧工地可视化解决方案-智慧工地源码

智慧工地是指运用信息化手段,围绕施工过程管理,建立互联协同、智能生产、科学管理的施工项目信息化生态圈,并将此数据在虚拟现实环境下与物联网采集到的工程信息进行数据挖掘分析,提供过程趋势预测及专家预案,实现工程…

每日一题 2651. 计算列车到站时间

难度:简单 不多说 class Solution:def findDelayedArrivalTime(self, arrivalTime: int, delayedTime: int) -> int:return (arrivalTime delayedTime) % 24

为什么在线客服系统的消息撤回功能是有必要的?

如今在日常工作和沟通中,很多企业都在使用在线客服系统跟客户进行线上交流和协作。然而有时候客服可能会不小心发送错误的消息或包含敏感信息的消息,人们在现实的沟通交流中是不会真实存在“说出去的话还能收回来”的情况,但这是在网络上&…

2023-09-05 LeetCode每日一题(从两个数字数组里生成最小数字)

2023-09-05每日一题 一、题目编号 2605. 从两个数字数组里生成最小数字二、题目链接 点击跳转到题目位置 三、题目描述 给你两个只包含 1 到 9 之间数字的数组 nums1 和 nums2 ,每个数组中的元素 互不相同 ,请你返回 最小 的数字,两个数…

大模型综述论文笔记6-15

这里写自定义目录标题 KeywordsBackgroud for LLMsTechnical Evolution of GPT-series ModelsResearch of OpenAI on LLMs can be roughly divided into the following stagesEarly ExplorationsCapacity LeapCapacity EnhancementThe Milestones of Language Models Resources…

如何解决前端传递数据给后端时精度丢失问题

解决精度丢失 有时候我们在进行修改操作时,发现修改既不报错也不生效。我们进行排查后发现服务器端将数据返回给前端时没有出错,但是前端js将数据进行处理时却出错了,因为id是Long类型的,而js在处理后端返回给前端的Long类型数据…