1 工具介绍
本段介绍的是Linux环境下的工具的一些使用。
1.1 小玩意
在centos下,我们使用yum来管理软件包,yum(Yellow dog Updater,Modified)是Linux下非常常用的一款包管理器。
- 软件安装
一般安装软件需要root权限,可以在root用户下安装或者使用sudo yum install *** ,这里***指的是需要安装的软件包。
2 Vim介绍
首先介绍一下Vi与Vim ,简单点,vim是vi的升级版。下面主要说一下Vim的几种常见模式。其中先介绍最常用的三种模式:命令模式,插入模式,底行模式。
- 命令模式(正常模式,普通模式):
完成复制,粘贴,光标移动,删除等操作。 - 插入模式:
完成代码等内容的输入; - 底行模式:
完成文件保存或退出,也可以进行替换,找字符串,列出行号。
以上三种模式的切换方式:
按 i/a/o
shift +:
ESC
删除命令/回车
ESC
命令模式
插入模式
底行模式
提出问题:Vim有多少种模式? 解答: 在底行模式下输入:help vim-modes“” 我的是环境 阿里云centos7.6 其中有: Basic modes: 7种 Additional modes:6种
2.1 vim基本操作
插入模式几种区别:
- 按「i」切换进入插入模式,按“i”进入插入模式后是从光标当前位置开始输入文件;
- 按「a」进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字;
- 按「o」进入插入模式后,是插入新的一行,从行首开始输入文字。
2.1.1 命令模式操作
高效操作之光标操作:(在命令模式运行)
- vim可以直接用键盘上的光标来上下左右移动,但正规的vim是用小写英文字母「h」、「j」、「k」、「l」,分别控制光标左、下、上、右移一格
- 按[gg]:进入到文本开始
- 按「G」即 shift + g:移动到文章的最后
- 按「 $ 」即 shift + 4:移动到光标所在行的“行尾”
- 按「^」即shift + 6:移动到光标所在行的“行首”
- 按「w」:光标跳到下个字的开头
- 按「e」:光标跳到下个字的字尾
- 按「b」:光标回到上个字的开头
- 按「#l」(注意数字+小写的L):光标移到该行的第#个位置
- 按「ctrl」+「b」:屏幕往“后”移动一页
- 按「ctrl」+「f」:屏幕往“前”移动一页
- 按「ctrl」+「u」:屏幕往“后”移动半页
- 按「ctrl」+「d」:屏幕往“前”移动半页
高效操作之删除:(在命令模式运行) “x” : 删除光标所在位置的一个字符 “#x” : 删除光标所在位置向后的#个字符 “X”:删除光标所在位置之前的一个字符 “#X”:删除光标所在位置之前的#个字符 “dd”:删除光标所在行,其实是剪切操作 “#dd”:删除光标所在行向下数#行,其实是剪切操作
高效操作之复制: “yy” :复制光标所在行到缓冲区 “#yy”:复制光标所在行向下数#行到缓冲区 “p”:将缓冲区内的字符粘贴到光标所在位置 “#p”:粘贴n次
高效后悔药之“撤销”: “u” : 撤销,回到上次操作,多次按“u”,多次恢复 “ctrl + r” : 反撤销,撤销的恢复
2.1.2 底行模式操作
- “#” :输入任意一个数字 + 回车键 跳转到想要的行
- “set nu” : 显示行号
- “set nonu” : 取消显示行号
查找字符:
- “/搜索词”:搜索关键字,按n依次向下寻找
- “?搜索词”: 搜索关键字,按n依次向上寻找
保存文件: “w”:保存文件 “wq”:保存并退出 “q”:退出 “w/q+!”:!感叹号 强制操作
3 gcc工具
gcc的几个步骤:
- 预处理:头文件展开,去掉注释,宏替换,条件编译
- 编译:将C语言的代码翻译成汇编代码
- 汇编:将汇编代码生成目标二进制文件
- 链接:将目标文件和系统库进行链接,形成可执行程序
3.1 命令及操作
gcc -E Test.c -o Test.i
gcc -S Test.i -o test.s
gcc -c test.s -o test.o
gcc test.o -o test
3.2 gcc 选项含义
-E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面 -S 编译到汇编语言不进行汇编和链接 -c 编译到目标代码 -o 文件输出到 文件 -static 此选项对生成的文件采用静态链接 -g 生成调试信息。GNU 调试器可利用该信息。 -shared 此选项将尽量使用动态库,所以生成文件比较小,但是需要系统由动态库. -O0 #优化级别 -O1 -O2 -O3 编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高 -w 不生成任何警告信息。 -Wall 生成所有警告信息。
4 gdb-Linux调试器
在VS编程时我们会看到,一个程序发布有Debug和Release两种模式。其中在Linux中使用gcc/g++来直接生成的是Release版本。如需要调制需要生成调试版本。命令如下
gcc test.c -o test -g
如何进入GDB呢?命令
gdb test
4.1 调试命令
- list 查看代码
- list 1 查看从第一行起始 可以 简写成 l 1 (小L)
- quit 退出
- 打断点: break 10 10行打断点 简写为 b 10
- 查看断点 info b
- 运行 : run 或 r
- 进入函数(逐语句执行): s 或者 step
- 逐过程执行: n 或者 next
- gdb 能记住最近一次命令 只需要按回车即可
- 查看变量内容: p
- 跟踪变量,每次停下来都显示变量值: display+变量名 或者 display + &rt
- 取消长时间显示 undisplay + 编号
- 直接进入 until + 行号 直接跳转至某行 ,(默认跳过没用的花括号,不用执行的语句)
- 删除断点 : d + 断点编号
- 禁用断点 : disable breakpoint + 断点编号
- 启用断点 : enable + 断点编号
- 从一个断点到另一个断点(跳转到指定断点) : continue c ,(代码块划分,确定错误范围)
- 跑完当前函数 运行完当前函数 finish (逐个检测每个函数是否正常)
- 设置变量的值: set var i = 10
5 Make工具
make是一个命令,用来执行makefile文件里面的命令; makefile是一个文件,其写有项目的依赖结构;
5.1 单文件入门
假设已经有了test.c文件,Makefile应该这样写(#号是注释,供理解,写时候删除):
test:test.c
gcc test.c -o test
其实makefile还可以添加如下模块:
test:test.c
gcc test.c -o test
.PHONY:clean
clean:
rm -f test
注释: .PHONY的作用
- 说明其后接着是伪目标
- 保证总是被执行,每次make clean都会执行clean下的代码;
原理性操作(供理解): 仿照编译的过程来寻找依赖项逐步生成可执行文件。
test:test.o
gcc test.o -o test
test.o:test.s
gcc -c test.s -o test.o
test.s:test.i
gcc -S test.i -o test.s
test.i:test.c
gcc -E test.c -o test.i
.PHONY:clean
clean:
rm -f test.o test.s test.i test
5.2 多文件
文件结构: 下面上makefile文件:
main:main.o test.o
gcc main.o test.o -o main
main.o:main.c
gcc -c main.c
test.o:test.c
gcc -c test.c
.PHONY:clean
clean:
rm -r *.o main
5.3 小技巧
将上述多文件编写的Makefile写成这个(如下),将不会再显示命令执行过程;
test:test.o
@gcc test.o -o test
test.o:test.s
@gcc -c test.s -o test.o
test.s:test.i
@gcc -S test.i -o test.s
test.i:test.c
@gcc -E test.c -o test.i
.PHONY:clean
clean:
@rm -f test.o test.s test.i test
5.4 Makefile还可以这样写
可以将上述多文件的makefile写成如下形式,这里使用了通配符等;其实关于升级写法还有好多,比如定义变量等。
main:main.o cal.o
gcc -o $@ $^
%.o:%.c
gcc -c $<
.PHONY:clean
clean:
rm -f *.o main
|