Linux开发工具

目录

1、vim

[1.1 vim的基本模式](#1.1 vim的基本模式)

[1.1.1 常态模式](#1.1.1 常态模式)

[1.1.2 底行模式](#1.1.2 底行模式)

2、gcc/g++

[2.1 用gcc生成预处理文件-预处理](#2.1 用gcc生成预处理文件-预处理)

[2.2 用gcc生成汇编代码-编译](#2.2 用gcc生成汇编代码-编译)

[2.3 用gcc生成二进制码-汇编](#2.3 用gcc生成二进制码-汇编)

[2.4 用gcc生成可执行程序-链接](#2.4 用gcc生成可执行程序-链接)

3、Makefile

[3.1 Makefile的用法](#3.1 Makefile的用法)

[3.2 Makefile的项目清理](#3.2 Makefile的项目清理)

[3.3 Makefile的执行顺序](#3.3 Makefile的执行顺序)

4、yum

[4.1 yum三板斧](#4.1 yum三板斧)

5、git

[5.1 git三板斧](#5.1 git三板斧)

6、gdb

[6.1 readelf](#6.1 readelf)

[6.2 gdb具体调试操作](#6.2 gdb具体调试操作)

结语


前言:

在Linux下写程序和在vs下写程序是两种体验,后者比前者使用起来更加舒适,原因就是后者的开发环境属于IDE,IDE又称集成开发环境,他将编写代码、编译代码、调试代码等诸多功能集成在一起,使用起来较为方便。而在Linux下就不一样了,Linux没有集成环境,所以执行每个步骤需要程序员手动调用对应的工具,本文介绍的就是在Linux下进行开发时需要用到的工具,他们分别是vim(编辑器)、g++/g++(编译器)、Makefile(自动化构建工具)、gdb(调试器)以及git(版本控制)。

1、vim

vim是一个编辑器工具,他的作用是用来写代码仅此而已,在一个普通的vim下写代码不会有任何的信息提示,就如同在文本中写代码一样,但是vim经过各种配置后可以显示各种代码信息,而且会自动对齐(提示:下文中的vim就是经过配置的)。

在Linux下输入指令:vim 普通文件,就可以进入该文件中执行vim的相关操作。

1.1 vim的基本模式

vim有三种基本模式,分别是常态(命令)模式、编辑模式、底行模式。他们的作用如下:

常态模式:刚开始用vim进入文件时,默认就是常态模式,在该模式下可以对已经写好的代码进行复制、剪切、撤销、删除等命令。

编辑模式:即用来写代码的模式,在该模式下只可以编写代码。在常态模式下按下i进入该模式,按下esc从该模式退回至常态模式。

底行模式:当我们写完代码后需要保存并退出时就要进入该模式。在常态模式下按下shift + ';'进入该模式,按下esc从该模式退回至常态模式。

三种基本模式的关系图如下:

1.1.1 常态模式

常态模式下可以执行各种命令,当vim进入一个普通文件时默认的就是常态模式,左下角可以观察当前模式,具体示意图如下:

举例,比如要复制第8行的内容,光标移到该行,按下yy复制(yy默认复制1行,也可以在yy前面跟上要复制行数的数量,比如3yy就是从光标所在的行开始向下复制3行内容,这里用3yy表示复制8、9、10行的内容),然后按p粘贴,默认p是粘贴一行,p前面跟数字则粘贴多少次,比如100p则粘贴内容100次。

比如这里在第8行,执行命令yy,2p,则表示复制第8行内容,然后在第8行粘贴两次,具体示意图如下:


相关命令对应的操作如下(最常用的):

1、yy,复制光标所在行的内容,yy前面跟数字n表示算上当前行向下复制n行。

2、p,从光标处的下一行粘贴复制的内容,p前面跟数字n表示粘贴n条复制内容。

3、dd,剪切光标所在行的内容,dd前面跟数字n的原理同上,即剪切n行。值得注意的是若单独使用dd则表示删除,若dd和p配合使用则是剪切。

4、u,撤销操作,相当于windows下的ctrl+z。

5、ctrl + r,回退操作,相当于windows下的ctrl+y。

6、h、j、k、l,表示移动光标向左、下、上、右。

7、gg,光标定位至文件最开始处。

8、shift + g,光标定位至文件最末尾处。

1.1.2 底行模式

底行模式指的是光标移动到最底行的模式,这时候可以进行代码的保存和退出vim等操作,底行模式如下:

底行模式的常见命令如下:

1、set nu,显示所有代码的行号。

2、vs 文件名,可以分屏操作其他文件。

3、w,保存。w!强制保存。

4、q,退出。q!强制退出。

5、!具体指令,可以在不退出vim的情况下对外面使用指令。

2、gcc/g++

gcc/g++作为Linux下的编译器,专门负责编译代码,其中gcc用于编译用c语言写出来的代码,而g++用于编译用c++写出来的代码,并且g++也可以编译c语言的但是gcc不能编译c++的代码。gcc和g++除了上述的区别外,其余包括用法都相同,下文用gcc来举例。

当编译代码时,必须经过这四个阶段:预处理、编译、汇编、链接。 通过gcc指令可以直接让文件编译成可执行程序,gcc格式为:gcc 选项 要编译的文件 选项/-o 可执行程序,具体示例如下:

2.1 用gcc生成预处理文件-预处理

预处理阶段进行的操作是宏替换、去注释、头文件展开、条件编译等,在Linux下可以使用gcc清楚的观察预处理文件,具体操作为:gcc -E 要编译的文件 选项/-o 预处理文件.i,选项-E的作用是在编译过程中执行到预处理阶段时停下来,并且生成预处理后的文件.i。

具体示例如下:

2.2 用gcc生成汇编代码-编译

编译阶段的主要目的就是让文件生成汇编代码,在此阶段编译器会检查代码中是否出现语法错误以及代码是否规范,检查无误后会将代码翻译成汇编语言。 具体操作为:gcc -S 要翻译的文件 选项/-o 汇编文件.s,选项-S可以让编译文件的时候在编译阶段停下来,.s表示汇编代码的文件。具体示例如下:

2.3 用gcc生成二进制码-汇编

此过程发生在汇编阶段,可以把编译阶段生成的汇编文件.s转成.o的二进制码文件,因为cpu只能看得懂二进制,具体操作为:gcc -c 要转换的文件 选项/-o 二进制文件.o,示例如下:

2.4 用gcc生成可执行程序-链接

在上述阶段都正常完成后,最后一步链接可以产出可执行程序,链接的主要目的是将代码中调用库函数的函数调用与库之间建立联系, 具体操作为:gcc 要链接的文件 选项/-o 可执行程序,仔细发现其实就是最常用的gcc写法,只不过gcc的对象可以是.o文件也可以是.c文件,示例如下:

3、Makefile

Makefile是一个普通文件,他可以实现自动化编译,当有大量的工程文件时,若要编译其中每个源文件和对应的头文件,则会导致大量的工作和繁琐的重复性操作,Makefile的目的就是为了能让这些工程文件实现自动化编译,只需一个简单指令make即可。

make是一个指令,他的对象默认是Makefile。

3.1 Makefile的用法

拿上述的test.c举例子,Makefile之所以可以实现自动化是因为gcc编译的指令写在了Makefile的内部,具体写法如下:

通常会把gcc test.c -o test.exe这句指令叫做test.exe目标文件的依赖方法,因为test.exe是依赖该指令而生成的。


当外部用make指令时就会自动调用gcc test.c -o test.exe这句指令,从而生成可执行程序test.exe,如下:

3.2 Makefile的项目清理

上述用Makefile实现了目标文件,那么删除该目标文件也可以用Makefile进行删除,具体写法如下:

运行结果:

3.3 Makefile的执行顺序

这里说一说Makefile的执行顺序,就拿上述的Makefile举例,make指令会先执行Makefile中的第一个目标文件,比如上述的Makefile的第一个目标文件是test.exe,那么单单一个make指令执行的就是test.exe的指令,即gcc test.c -o test.exe,若第一个目标文件是clean,则make指令执行的就是rm test.exe指令了。

顺序颠倒后的Makefile:

运行结果如下:


这时候如果想用Makefile生成可执行程序,只能用make 具体目标文件的方式:

4、yum

yum是一种软件包管理器,主要负责从服务器上下载各种软件以供需求,他在Linux下是一个目录,该目录里有一个叫yum源的东西,这个yum源也是一个目录,他的路径是:/etc/yum.repos.d,他里面装了各自配置文件,这些文件里面含下载插件的网址,所以当我们使用sudo yum install 要安装的软件的指令,系统会去这些网址内寻找要下载的软件并下载。

4.1 yum三板斧

查看软件包:yum list。该指令可以查看当下Linux可以下载的软件包有哪些(可下载的软件包数量取决于配置文件的多少,若下载的软件没有相关的配置文件则下载不了,因为无法从配置文件中找到下载网址),具体操作如下:


安装软件:sudo yum install 安装的软件,比如上述图中要按照slang这个软件,则输入指令sudo yum install -y slang即可下载按照(若不带-y则下载的时候系统会再次让你确认是否安装该软件,若带-y则无需确认直接下载。)

卸载软件:sudo yum remove 要卸载的软件。

5、git

git是一款提供版本控制的软件,而gitee是一个代码托管的平台,是一个网址,他底层采用的是git思想,多人协作的时候会将代码上传至gitee上,这样一来其他人就可以看到对方写的代码了,以下是在Linux下使用命令行进行代码上传的方法。

1、首先在gitee平台中新建一个仓库:

2、创建好后,在克隆与下载处拿到仓库的网址:

3、将上述网址复制下来,来到Linux平台下,运行指令git clone https://gitee.com/zh_en/warehouse-under-linux.git,就可以将远端的仓库克隆一个在本地中,示意图如下:

至此,完成了远端与本地的仓库同步。

5.1 git三板斧

1、在同步的目录下创建新的文件,比如test.c,然后使用git add .指令,表示将当前路径下的所有文件进行添加:

2、然后使用提交命令git commit -m "相关日志信息",如下:

3、最后将其推送至远端仓库即可,使用命令:git push,如下:

最后可以在gitee上观察仓库里的变化:

发现确实有一个test.c的文件被提交上来了。

6、gdb

程序的发布版本有两种:release和debug,并且release版本下是不能调试的,而上文提到的编译指令gcc 选项 要编译的文件 选项/-o 可执行程序, 默认生成的是release版本,为了能够让可执行程序进行调试,需要在该指令的选项处加上-g,如下:

加上-g后的指令可以生成debug版本的可执行程序。

6.1 readelf

使用readelf观察可执行程序的debug调试信息(注意readelf的对象文件必须是含debug调试信息的文件,否则不会显示debug调试信息):

6.2 gdb具体调试操作

首先用指令gdb test.debug进入调试界面:

此时在光标处输入quit就可以退出gdb模式了,从上图可以发现什么代码信息都没有,这时候可以用l 0,从头开始往下显示10行代码:

其中r对应vs下的f5,即运行程序,若没有断点则直接运行出结果:


具体操作热键如下:

1、r,开始调试,若没有断点则运行结果,也有重新调试的意思。

2、b+行号,给对应的行数打上断点。

3、info b,查看所有断点的信息。

4、d 断点序号,删除断点。

5、n,对应vs下的f10,表示逐过程。

6、p 变量名,打印变量的信息。

7、s,对应vs下的f11,表示逐语句。

8、bt,查看当前的栈帧。

9、finish,将当前所在的函数栈帧直接运行结束。

10、display 变量名,长显示某个变量。

11、undisplay 变量名,取消长显示。

12、c,运行至下一个断点处停下(注意此处不能用r,因为r也有重新调试的意思)。

13、until 行数,跳转至指定行,通常用来跳出循环。

14、disable/enable 断点的序号,隐藏/打开断点。

结语

以上就是关于Linux下的相关工具的讲解,学会运用以上的相关工具可以帮助我们在Linux下能够更好的开发,提高开发效率。

最后希望本文可以给你带来更多的收获,如果本文对你起到了帮助,希望可以动动小指头帮忙点赞👍+关注😎+收藏👌!如果有遗漏或者有误的地方欢迎大家在评论区补充,谢谢大家!!

相关推荐
woshilys19 分钟前
sql server 查询对象的修改时间
运维·数据库·sqlserver
疯狂飙车的蜗牛1 小时前
从零玩转CanMV-K230(4)-小核Linux驱动开发参考
linux·运维·驱动开发
恩爸编程2 小时前
探索 Nginx:Web 世界的幕后英雄
运维·nginx·nginx反向代理·nginx是什么·nginx静态资源服务器·nginx服务器·nginx解决哪些问题
Michaelwubo3 小时前
Docker dockerfile镜像编码 centos7
运维·docker·容器
远游客07133 小时前
centos stream 8下载安装遇到的坑
linux·服务器·centos
马甲是掉不了一点的<.<3 小时前
本地电脑使用命令行上传文件至远程服务器
linux·scp·cmd·远程文件上传
jingyu飞鸟3 小时前
centos-stream9系统安装docker
linux·docker·centos
好像是个likun3 小时前
使用docker拉取镜像很慢或者总是超时的问题
运维·docker·容器
超爱吃士力架3 小时前
邀请逻辑
java·linux·后端
LIKEYYLL5 小时前
GNU Octave:特性、使用案例、工具箱、环境与界面
服务器·gnu