linux之初,常用到的工具有vim、gcc、gdb、makefile,yum
一.vim:(importent)文本编辑工具---IDE
Ubuntu : 不自带vim,需要自己安装
vim下的模式:12种 ---6种基本模式,6种条件模式 (调研)
普通模式:i 进入插入模式
L 光标回到最后一行
a 光标移动到下一个字符处开始插入
A 光标移动到行尾开始插入
o 在光标下方添加新行开始插入
O 上方添加新行开始插入
s 删除光标所在字符开始插入
yy 复制光标所在行
p 粘贴复制的内容与光标下方
nyy 复制n行
dd 删除(剪切)光标所在行
ndd 删除n行
w 光标按单词向右移动 b 向左
dw 删除这个单词光标所在位置后的所有字母
x 删除光标所在字符
u 撤销上一次操作
Ctrl+r 反向撤销 r 字符替换
Ctrl+v 进入列式选中模式
v 进入行视图模式
gg 将光标移动到首行
G 移动到末尾
gg=G 全文按C语言
:! ls 直接执行命令,回车返回vim
二.gcc:(importent)编译工具,将C语言程序变成机器可识别的程序
(important 面试)要知道gcc将C语言程序变成机器可识别的程序经过哪些过程
-o 用于指定生成的文件名称
-E 只预处理
-S 只编译
-c 只汇编
1.预处理
展开所有代码
2.编译
纠错,无错误则将程序编译为汇编代码
3.汇编
将汇编代码编译成为机器可识别的二进制指令代码
前三步只是将自身代码编译成机器代码,但是在我们的代码中有很多的调用函数并不是我们实现的,想要生成最终的可执行程序,那就必须在我们的代码中能够知道这些函数的实现。
操作系统提供的方法:系统调用接口,系统调用不太好用,因此有一些大拿就对这些接口进行了封装,最终打包出一个库(文件,其中都是一些接口函数)
对于我们只需要使用这些函数的时候,包含头文件,并且链接库即可。
4.链接
将别人已经实现的代码拿来,跟我们的代码一起生成最终的一个可执行程序。
动态链接:记录函数地址信息,并不把全部代码拿来,所以可执行程序较小,但是运行时依赖库。
静态链接:将库中的代码全部拿来,跟我们的程序一起写入最终的可执行程序,最终生成的可执行程序较大,但运行时,不依赖库。
gcc默认是动态链接。
三.gdb是linux下最火的调试工具。
如何gdb运行一个程序:
gdb ./main 程序后边不需要加参数信息,因为参数的获取在这里无效。
仅加载可执行程序。
进入gdb调试时候的命令操作:
run/r 运行程序。后跟程序的运行参数信息
start 开始逐步调试
l 默认查看当前所在位置附近五行的代码
n 下一步,如果是函数不会跟踪进入函数,而是直接完成功能
s 下一步, 如果是函数就跟踪进入函数
break main.c:20 加断点
b file:line 给指定文件的指定行添加断点
b function_name 通过函数名非函数添加断点
info break 跳至断点
d 删除断点,默认删除所有断点
d break id根据断点id来删除指定的断点
p打印变量内容
watch 变量监控,变量的值每次修改的时候都会停下来
watch var
bt 查看函数调用栈信息,排查段错误时,非常有用的。
四.makefile 不普通的普通文件
操作系统中有一个命令叫make
记录的是一系列的编译规则,当我们执行make命令,那么make这个程序就会在当下目录下查找makefile文件,然后一步步的解释执行makefile中记录的编译结果规则,最终通过这些编译规则,完成项目的整个编译。
makefile的编写规则:
|生成文件:依赖文件
|[\t]为了完成生成文件的生成,要执行的命令
main:main.c
gcc main.c -o main
当makefile编写完毕,保存退出后,直接敲击make命令,那么make命令所对应的程序会到当前目录下找到makefile文件,然后按照makefile中记录的编译规则来完成最终项目的编译。
因此makefile文件名字只能是makefile或Makefile
makefile会记录源文件和程序文件的时间信息,如果源文件的最后一次修改时间实在程序文件之后,那么就会重新编译否则将报告程序是最新的,而不需要重新编译
make永远只生成第一个对象,执行完生成对象所要执行的命令后就会退出了,所以不会再生成第二个
如果makefile有多个要生成的对象,那么就需要在最上边定义个对象,将生成的对象都作为这个对象的依赖对象。
make可以指定生成要生成的对象。
make clean
make -C 是make的常用选项,功能:是进入指定目录下执行make命令