Linux系统之常用工具(二)

一、vim编辑器

a、vim安装

离线安装:dpkg -i  rpm
在线安装:apt-get instsall vim
配置vim路径:sudo gedit /etc/vim/vimrc

b、常用命令

打开操作:vim filename
vim+行号 filename

1.命令模式
		文本删除
			n 代表操作的个数
命令说明
d0删除从光标前一个字符到行首内容
D或d$从光标到行尾
(n)x删除光标处的字符(n代表向右要删除的字符数)
(n)X删除光标前的字符(n代表光标前字符向左要删除的字符数)
(n)dd删除光标所在行(n代表要删除的行数)
(n)dw删除一个单词(n代表要删除的单词数)
文本复制
命令说明
(n)yy复制光标所在行(n代表当前及后n-1行)
Y复制光标所在行
(n)yw复制一个单词(n表示复制指定的n个单词)
命令说明
p粘贴当前缓冲区内容
u撤销指令
Ctrl r返撤销
屏幕滚动
命令说明
Ctrl + u将屏幕向前翻滚半屏幕
Ctrl + d将屏幕向后翻滚半屏幕
Ctrl + f将屏幕向后翻滚一屏幕
Ctrl + b将屏幕向前翻滚一屏幕
指针行跳变
命令说明
n+enter下移动n行
0本行开头
$本行行尾
nG光标移动到n行
gg 、G跳 开始、结尾
gg==G快速对齐代码
2.插入模式
	插入文本命令
		追加文本命令
			空行插入命令
			
	按esc进入命令行模式
命令说明
i将文本插入到光标所在位置
I将文本插入到当前行首
a将文本加到光标所在位置之后
A将文本追加到所在行尾
o在光标所在行下面添加空行
O在光标所在行上面添加空行
3.底行模式
	退出指令
		搜索字符串
			字符串替换
命令说明
q!强制退出不保存
w只保存
w!强制保存不退出
wq先保存在退出
shift+:进入命令行模式
shift+zz强制退出
x若修改保存退出否则直接退出
/字符串从光标开始向后搜索 n:往下找 N:往上找
?字符串从光标开始向前搜索
%s /源字符串/目标字符串/g
4.可视模式
	命令模式下v进入可视模式
		d:删除  y:复制  x:剪切

二、vim编译器

程序编译过程
a.编译预处理  gcc –E xxx.c –o xxx.i
b.编译 gcc -S xxx.i -o xxx.s 
c.汇编  as xxx.s -o xxx.o  
d.链接  gcc xxx.o -o xxx 
a.处理伪指令(#)和特殊的特殊符号
	伪指令包括:1)宏定义指令;2)条件编译指令;3)头文件包含指令;
b.把预处理完的文件进行一系列词法分析,语法分析,语义分析及优化后生成相应的汇编代码文件
c.汇编器是将汇编代码转变成机器可以执行的命令,每一个汇编语句对应一条机器指令
d.头文件只是函数声明,实现封装在库文件中,链接就是找到指定路径下的库文件
常用编译选项
1、没有任何选项:gcc helloworld.c
2-o选项,指定输出文件名:gcc -o helloworld helloworld.c
3-c选项,只编译,不链接:gcc -c helloworld.c
4-S选项,使用预处理C源文件产生的文件,产生汇编源文件:gcc -S helloworld.c
5-E选项,预处理C源文件:gcc -E helloworld.c
6-g选项,产生供gdb调试用的可执行文件:gcc -g helloworld.c

三、动态库和静态库

a.静态库的创建
1.准备功能函数的源文件  main.c xxx.c yyy.h	如:main.c fun.c fun.h
2.只编译不连接,生成目标文件	gcc -c xxx.c -o xxx.o	如:gcc -c fun.c -o fun.o
3.打包生成静态库 ar -rc libxxx.a xxx.o yyy.o		如:ar -rc libfun.a fun.o
4.利用静态库编译程序 gcc main.c -lxxx  -L./	如:gcc main.c -lfun -L./
					-l:指明用到的库文件
					-L:库文件所在的的路径
b.动态库的创建
1.准备功能函数的源文件 xxx.c  yyy.c zzz.h	如:main.c fun.c fun.h
2.只编译不连接,生成目标文件 gcc -fpic -c fun.c -o fun.o	 
							----64位系统,需要加-fpic
3.打包生成动态库 gcc -fpic -shared xxx.o yyy.o -o libxxx.so	如:gcc -fpic -shared fun.o -o libfun.so
4.利用动态库编译程序 编译应用程序  gcc main.c -lxxx  -L./
								-l:指明用到的库文件
								-L:库文件所在的的路径
注:系统只会到默认的路径下去寻找动态库 
		默认的库路径:lib或者usr/lib
区别:
	静态库 .a
	动态库 .so
	静态库:直接将库文件编译到可执行程序里面
	动态库:动态去lib  usr/lib 下去寻找需要的库文件加载
	ldd a.out:查询a.out程序运行需要的库文件

四、调试工具gdb

a.为何需要gdb:根据IEEE研究,每个重要软件最初都有缺陷,一般来说没100行有2个左右
b.常用调试技巧
	测试:找出程序中存在的缺陷或错误
	固化:让程序的错误可重现
	定位:确定相关的代码行
	纠正:修改代码纠正错误
	验证:确定修改解决了问题

如何使用gdb去调试程序

1.在编译的时候加入调试信息  gcc -g xxx.c -o xxx
2.启动gdb调试
3.开始调试 ---常用调试命令
			列出当前文件:l(即list)
			加入断点:b(breakpoint)  +  linenum
			开始执行:r(run) ---- 程序会停在断点处
			查看变量:p  +  变量名
			继续运行到下个断点处:c(cont)
			
			启动调试:start   -- 程序停在main的第一行
			逐步执行:next    -- 遇到函数直接得到函数结果
			逐步执行:step    -- 遇到函数跳到函数内部
			
			注:不能跳转到第三方函数,因为第三方函数没有加入调试信息
			注:next遇到函数直接执行得到结果,step进入函数内部,一步一步执行
				
			结束函数:finish  --跳出函数,直接得到函数结果
			失能断点:disable + 断点号
			使能断点:enable  + 断点号
			删除断点:delete breakpoint + 断点号
					 clear + 行号    
			结束调试:quit

四、工程管理工具make

make:相当于脚本编程语言;本质是实现自动化编译;需要makefile或者Makefile文件支持

		指定makefile文件:make -f xxx

make是什么?
	按照事先写好的编译规则,自动去执行编译过程。而规则就是写在makefile文件里的“信息”。我们可以将编译顺序(规则)写在Makefile文件中;然后我们只需要输入一个make。它就会自动的执行规则从而编译整个工程。

makefile
	作用:告诉make 应该如何去构造相应的应用程序
	
构成:
	依赖关系
		作用:定义最终应用程序中的每一个文件与源文件之间的关系
		语法结构:make要创建的目标名称+冒号+空格或tab+用空格或tab隔开的文件列表
				特殊目标名称:all(伪目标);all后面列出所有从属目标;all: myapp myapp.1
	规则
		作用:定义了目标的创建方式
		语法结构:tab+规则,如tab+gcc -c main.c
			注意:开头的tab不能用空格或多个空格代替,行---不能以空格结尾
	注释:以#开头
	宏:make命令内置特殊宏
		$@:目标文件
		$^:所有的依赖文件
		$<:第一个依赖的文件
		
如何实现自动化编译一个工程?
	1. 建立Makefile文件
	2. 在Makefile(makefile)文件中编写编译规则
		make的语法规则:
			目标:依赖   -----顶格写
				 指令    -----以tab键开头
	3. make   --在命令行输入make,
				make会自动执行Makefile中的规则
	注意:make如何判断是否执行某一规则
		1. 是否有这个目标文件
		2. 该目标文件是否被更新
例:

main:main.o 
	gcc main.o -o main 
main.o:main.s 
	as main.s -o main.o
main.s:main.i 
	gcc -S main.i -o main.s 
main.i:main.c 
	gcc -E main.c -o main.i 
clean:
	rm *.o *.s *.i main -rf 


led.o:main.c led.c 
	gcc main.c led.c -o led.o 
clean:
	rm *.o *.so -rf

				
CC = gcc 
led:main.c fun.c
	$(CC) $^ -o $@
clean:
	rm *.o led -rf

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值