常用工具vim
vim共有12种模式;常用的三种;
普通模式
低行模式
插入模式
模式切换;
普通模式》=插入模式;i
i;从光标所在的位置开始插入. I光标移动到行首,开始插入
a;光标移动到下一个字符开始插入,A;光标移动行尾巴=开始插入,
o;在光标所在行的下方新建一个开始插入,
插入模式》=普通模式;esc
普通模式》=底行模式;;/
底行模式》=普通模式;esc
底行模式下的操作,
;w ;wq ;q ;q!保存退出操作;
普通模式下的操作;
光标移动;
hjkl;左下上右 w/b按单词移动,crtl+f/b 上下翻页 gg/c
复制;
yy 复制光标所在行, nyy 从光标所在行开始复制n行数据;
粘贴;
p向光标所在行下方粘贴; P想光标所咋行上方粘贴。
*gcc;编译器
gcc将高级语言(C语言)编译成电脑能识别言。
预处理;去掉注释展开代码。
编译;语法语义纠错,将C语言代码解释成汇编语言代码。
汇编;将汇编代码解释成机器指令。
链接;链接库文件中的代码;
静态链接;*链接动态库, 将库中代码拷贝到程序中,程序比较大,但是运行时不需要依赖静态库的存在。
静态库如果多个程序使用了同样的静态库,运行时程序被加载到内存中,会出现多份沉余代码。
动态链接;*链接动态库, 记录函数位置信息,程序比较小,但是运行时需要依赖动态库的存在。
gcc默认链接是动态链接。
gcc常用选项;
-E 只进行预处理 -S只进行编译 -C直径性汇编 -O用于指定生成的文件名称
gdb调试器;
gdb’调试程序的前提;生成debug版本程序‘ gcc -g
gcc默认生成的是release发布版程序,可执行程序中没有加入调试符号信息。
调式程序的一种bug。
1;加载程序;
gdb加载程序的时候如果程序有程序运行参数,不能加载的时候
gdp./main
2;开始调试
run 直接运行程序 , start 开始逐步调试
3;
list 查看代码 ,
n 下一步 不跟踪进入函数,直接将函数运行完毕。
list file:line
s 下一步 跟踪进入函数
until 直接运行到指定行 ,
until file:line
4;断点相关
break 打断点 ,info查看调试信息
break file:line
break function name
info break 查看断点信息
print 查看变量内容 , continue 继续运行 , delete
print var , delete break_id
watch 变量监控,当变量内容改变时,停下来,
watch var
5;查看调用信息;
make/Makefile;项目自动化构建工具
makefile;普通文本文件,但是不普通的是makefile记录的是项目流程规则
make;一个程序–makefile解释器;解释makefile中的项目构建规则;完成项目的构建
在当前目录下敲击make命令,make程序到当前目录找到makefile文件逐行解释
makefile文件名称大小写不敏感
makefile基本编写规则:
目标对象:【依赖对象】
tab要执行的命令
make的解释规则:
make在makefile中寻找第一个目标对象;
目标对象不存在:则报错退出
目标对象存在:检测是否有依赖对象
没有依赖对象:检测外部是否有目标文件(检测目标对象是否已经生成了)
目标对象未生成:执行要执行的命令(生成目标对象的命令
目标对象已生成:报错,目标对象已经有了,不需要重新生成
有依赖对象:检测外部是否有目标对象文件
目标对象未生成:执行要执行的命令(生成目标对象的命令)
目标对象已生成:在makefile继续向下查找依赖对象的生成规则
依赖对象在下一条规则中作为目标对象被生成,进而生成第一个目标对象后退出
目标对象不存在;
则直接执行命令生成
makefile预定义变量:$@ $< $^
$@; 目标对象
$^ 所有的依赖对象
$< 依赖对象中的第一个
伪对象;不管对象是否最新,是否存在,每次都需要需要为对象执行生成命令
声明伪对象:PHONY:clean