常用工具
一、编辑器
1. vim概念:
- . vi/vim 是 linux 下的通用文件编辑器,没有菜单,具有平台通用性,也可以在 windows 下面运行。
- . vim 具有四种模式:命令模式、插入模式、底行模式、可视模式。
- . 命令模式:也称为普通模式,该模式下主要执行 vim 命令操作,可以移动光标进行浏览,整行删除,但无法编辑文字。刚打开 vim 时默认处于此模式,无论处于什么模式,按下 ESC 键进入此模式。
- 插入模式:正常的文本编写模式,在命令模式下按下命令快捷键可进入此模式。 i,I,a,A,o,O。
- 底行模式:该模式下,光标位于屏幕底行,我们输入的内容都会出现在最低行。在命令模式下,按冒号(: )
进入底行模式。 - 可视模式:对文本进行选择操作。在命令模式下按 v,可进入可视模式。
2.、vim的使用
-
(1.)打开操作:vim filename 直接创建并打开文件
(2)命令模式:打开文件默认进入命令模式- 文本删除操作: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 + u将屏幕向前翻滚半屏幕
Ctrl + d将屏幕向后翻滚半屏幕
Ctrl + f将屏幕向后翻滚一屏幕
Ctrl + b将屏幕向前翻滚一屏幕 -
指针行跳变:
n+enter 下移动n行
0 本行开头
nG:光标移动倒n行
gg G:跳 开始、结尾
- 文本删除操作:n代表操作的个数
-
插入模式
-
插入文本命令
i将文本插入到光标所在位置
I将文本插入到当前行首 -
追加文本命令
a将文本加到光标所在位置之后
A将文本追加到所在行尾 -
空行插入命令
o在光标所在行下面添加空行
O在光标所在行上面添加空行
按esc进入命令行模式
-
-
底行模式
-
底行操作:命令模式下按冒号进入
-
退出指令
**q!**强制退出
w filename
w! filename
wq先保存在退出
x若修改保存退出否则直接退出 -
搜索字符串
/字符串
?字符串
搜索的字符串会显示高亮,去除高亮指令:noh
- 字符串替换
%s /源字符串/目标字符串/g
-
-
可视模式
命令模式下v进入可视模式
d:删除 y:复制 x:剪切
二、编译器
- gcc编译器
- 编译过程
-
程序编译过程
编译预处理 gcc –E xxx.c –o xxx.i
伪指令包括:1)宏定义指令;
2)条件编译指令;
3)头文件包含指令;
编译 gcc -S xxx.i -o xxx.s 把预处理完的文件进行一系列词法分析,语法分析,语义分析及优化后生成相应的汇编代码文件汇编 as xxx.s -o xxx.o 汇编器是将汇编代码转变成机器可以执行的命令,每一个汇编语句对应一条机器指令
链接 gcc xxx.o -o xxx 头文件只是函数声明,实现封装在库文件中,链接就是找到指定路径下的库文件
-
常用编译选项
-
没有任何选项:gcc helloworld.c结果会在与helloworld.c相同的目录下产生一个a.out的可执行文件。
-
-o选项,指定输出文件名:gcc -o helloworld helloworld.c
-
-c选项,只编译,不汇编连接:gcc -c helloworld.c-c意思就是Compile,产生一个叫helloworld.o的目标文件
-
-S选项,产生汇编源文件:gcc -S helloworld.c-S意思就是aSsemble,产生一个叫helloworld.s的汇编源文件
-
-E选项,预处理C源文件:gcc -E helloworld.c-E意思就是prEprocess。输出不是送到一个文件而是标准输出。当然可以对它进行重定向:gcc -E helloworld.c > helloworld.txt
-
-g选项,产生供gdb调试用的可执行文件:gcc -g helloworld.c产生一个叫作a.out的可执行文件,大小明显比只用-o选项编译汇编连接后的文件大。
三、动态库静态库
-
库的概念:为了提高程序的编写效率以及模块化编程的思想,我们可以把相应的函数打包成库文件使用。 Linux 下的库文件分为静态库和动态库文件,包含了通用函数的数据和二进制可执行机器码的文件
-
静态库的创建.a
gcc fun.c -c // 生成.o文件ar -rc libfun.a fun.o //打包生成静态库
gcc main.c libfun.a //利用静态库编译程序
-
动态库的创建.so
gcc fun.c -c //生成.o文件
gcc -fpic -shared fun.o -o libfun.so //生成动态库
把库文件复制到**/lib下和/usr/lib**
gcc main.c -lfun //利用动态库编译程序 -l:后面跟需要链接的库
./a.out 运行程序 运行期间会寻找动态库,只会在系统默认路径下寻找,所以需要把库文件复制到/lib和/usr/lib下 -
区别:静态库直接将库文件编译到可执行程序里面
动态库:动态去lib usr/lib 下去寻找 需要的库文件加载
ldd a.out:查询a.out程序运行需要的库文件
四、调试工具gdb
- gcc 1.c -g //生成可调试的程序
- gdb a.out //调试a.out
- 常用调试命令及方法
-
run 运行一个程序,run命令简写 r
-
l命令相当于list,从第一行开始例出原码
-
break 许多命令可以设置断点, help breakpoint 会列出这些命令,示例:break 16 (也可简写b 16) 设置断点,在源程序第16行处
-
info break 查看断点信息
-
-b <function-name(函数名称)>
-
cont继续运行,直到下一个断点
-
delete d breakpoint num(断点标号)
-
enable(启用) enable breakpoint (启用断点)
-
disable (禁用) disable breakpoint (禁用断点)
-
clear clear <line_number> (清除<行号>)
-
print p arg
-
next n 单条语句执行,next命令简写,next遇到函数直接执行得到结果,step进入函数内部,一步一步执行
-
step 单步执行,遇到子函数就进入并且继续单步执行
-
quit 退出
-
finish结束当前函数,返回到函数调用点
五、工程管理工具make
- 作用:管理工程文件编译
- make:相当于脚本编程语言,本质是实现自动化编译,需要makefile或者Makefile文件支持
- 使用:make //读取makefile文件编译整个工程
- make clean //读取makefile文件做工程清理
- Makefile:如果在文件夹内找不到makefile make会尝试去找Makefile文件
- 编写规则
例如:
使用vim编译器建立makefile文件
使用tab键
目标:依赖语法
- 变量的定义:makfile里面的变量没有类型之分,直接定义即可,引用使用$符号引用
- 预定义变量 宏
$^:所有的依赖文件
$@:目标文件
$<:第一个依赖的文件