5-17(linux下的常用软件工具)

1、编辑器:vim

vim是一个命令行编辑器,不能使用鼠标,vim具有12种操作,常用的主要有3种:

插入模式:进行文本数据的编辑插入,

普通模式:进行文本的常见的操作:复制,剪切,复制,光标移动,返回,文本对齐。

底行模式:进行文本的保存、退出以及文本的匹配、查找、替换等

vim的基本使用:

vim filename  打开一个已存在的文件(打开后默认是普通模式),如果文件不存在,则会创建一个该文件。

操作模式的切换(都是围绕着普通模式)

普通-》插入:i、a、o 、I、A、O

其中i为直接进入插入模式,a为先将光标移动到下一个字符,在进入插入模式,o是将光标移动到下一行(单独开辟一行),再进入插入模式;I为将光标移动到该行行首,再进入插入模式,A是将光标移动到该行行尾,再进人插入模式,O是将光标移到上一行(单独一行),再进入插入模式。

普通模式-》底行模式:  按下:(英文状态下的:)即可

其中:q表示直接退出,:w表示保存;:wq表示保存后退出;:q!表示强制退出(不保存)

其他模式-》普通模式:按下esc即可;

其中在普通模式下的操作:


光标移动:

hjkl为上下左右;

b/w为依次移动一个单词,向左向右移动;

ctrl+b/f为上下翻页;

gg光标跳转到文档行首(第一行);

G光标跳转到文档行尾(最后一行)


文件操作:

yy/nyy:复制光标所在行/及光标下的n-1行。

p(小p)为粘贴:光标下方粘贴;

P(大P):光标上方粘贴。

vim中删除就是剪切:dd/ndd删除光标所在行/及光标下方n-1行;

x:删除光标所在位置;

dw:删除单词。


其他操作:

u:撤销上一次的操作;

ctrl+r撤销的反向操作;也就是如果使用了u,但是使用过了头,再使用ctrl+r就可以退回一步。

gg=G:全文按照文档格式进行对齐。


2、软件包管理工具:(相当于应用商店)

安装其他软件的工具:

三板斧操作:

yum list:打印所有软件包

yum search...:搜索指定的软件包   yum search vim

安装软件包:

第一步:su root,安装软件必须有root权限;

第二步:yum install vim   安装vim软件

移除软件包:

必须在root用户下,所以第一步也是su root

yum remove vim  卸载vim软件包;


3、编译器(gcc/g++)

作用:机器无法识别c,c++等高级语言,需要编译器将高级语言代码解释成机器指令,生成可执行程序文件。

gcc编译器常见选项:

-E:只进行预处理处理;-o指定要生成的文件名称。

eg:gcc -E a.c -o a.i;   a.c文件经过预处理生成a.i文件

-S:只进行编译

eg:gcc -S a.i -o a.s    a.i文件经过编译处理后生成a.i文件

-C:只进行汇编处理

eg:gcc -C a.s -o a.o     a.s文件经过汇编处理生成a.o文件。

常见错误:

未定义(undefine):就是我们告诉了编译器有什么变量或函数,可是编译器找不到。

未声明(uncleared):就是我们没有告诉编译器有什么变量或函数,编译器直接使用了。

链接:就是将所有用到个机器指令打包到一起,生成可执行程序,包括库文件。

链接库文件主要有2种方式:

动态链接:就是只记录库里函数符号信息表,生成的程序小,但需要加载动态库,不存在代码冗余。

静态链接:直接将使用的函数实现写入到可执行程序中,生成的可执行程序大,但是不需要加载库文件,存在数据冗余。


4、调试器:(gdb)

调试一个程序的运行过程,可以让我们能够从运行过程中发现哪里出错。

只有debug的代码才可以进行调试,gcc生成的可执行程序默认为release版本,所以不能进行调试,如果想要啥生成debhg版本的,需要加-g选项。

eg:gcc -g a.o b.o -o main  生成了debug版本的main程序。

-g选项是加在生成可执行文件的步骤上

调试步骤:

第一步:加载程序:

gdb ./main    指定目录,指定文件

gdb -p 38908   直接对一个正在运行的程序进行调试,-p用于指定进程id。

第二步:调试程序:

run:直接运行

start:开始逐步运行

第三步:常用调试指令:

流程控制操作:

next/n:下一步,遇到函数直接输出结果,不进入函数。

step/s:下一步,但是遇到函数会进入。

list/l:默认查看调试行附近代码,也可以指定行进行查看

eg:list file:line  查看line附近的代码。

until:直接运行到指定行

until a.c 11,直接运行到a.c的第11行

continue/c:从调试行继续向下运行,直到断点处停下。


断点操作:

break/b a.c 11指定文件指定行进行打断点,

break/b function  指定函数打断点。

info break:查看断点信息,也就是打印出所有断点的位置等信息。

watch:watch a  给变量a打断点,如果a的值发生变化,就停下。

delete/d: 删除断点


内存操作:

查看/修改变量数据

print/p a;  查看a的数据      print/p a = 10;将a的值改为10;

backtrace/bt:查看程序调用栈信息,程序一旦奔溃,查看调用栈可以快速定位到崩溃位置,栈顶函数就是出现崩溃的函数。


5、项目的自动化构建工具(make/makefile)

makefile:是一个文本文件,里面记录着项目的构建流程;

make:makefile的解释程序,逐行解释makefile中的项目规则,执行构建指令。

makefile的构建规则:

目标对象:依赖对象

tab 执行指令(构建指令)

eg:

main:a.c b.c

gcc a.c b.c -o main

make的执行规则:

make首先会在当前目录下找makefile/Makefile;找到后,会在makefile中找到第一个目标对象,根据和依赖对象的时间关系(也就是判断目标对象和依赖对象最近一次的修改时间谁跟接近当前时间),判断是否需要重新生成一个新的目标对象;如果需要重新生成则会执行对应下方的指令。并且make只会生成第一个目标对象,也就是执行第一个目标对象。


注意“make的执行规则中,要生成目标对象,首先要保证依赖对象已经全部生成。

makefile编写规则进阶:

makefile中的预定义变量,可用来替换对象名,使编写更加简单。

[email protected]:表示目标对象

$^:表示所有依赖对象

$<:表示所有依赖对象中的第一个依赖对象。

则:

main:a.c b.c

gcc $^ -o [email protected];

更加简便方法:

wildlard/patsubst

工程是需要清理的所有有了clean;

clean:makefile的清理动作,为第二个目标对象,不会自动执行,需要指定执行。

make clean这样指定执行clean,但是有时候目录中如果有了clean,那么clean就是最新的了,所以判定不会重新生成,为了解决这个问题,所以有了声明伪对象:

声明格式:

.PHONY:claen

声明的伪对象,不管其对象是什么格式,都会去重新生成一个该对象。


6、项目的版本管理工具(git)

对项目的开发周期进行管理。