三Linux工具(vimgcc/g++ gdbMakefile)
Posted yumoz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了三Linux工具(vimgcc/g++ gdbMakefile)相关的知识,希望对你有一定的参考价值。
快速定位
1 工具介绍
本段介绍的是Linux环境下的工具的一些使用。
1.1 小玩意
在centos下,我们使用yum来管理软件包,yum(Yellow dog Updater,Modified)是Linux下非常常用的一款包管理器。
- 软件安装
一般安装软件需要root权限,可以在root用户下安装或者使用sudo yum install ***
,这里***指的是需要安装的软件包。
2 Vim介绍
首先介绍一下Vi与Vim ,简单点,vim是vi的升级版。下面主要说一下Vim的几种常见模式。其中先介绍最常用的三种模式:命令模式,插入模式,底行模式。
- 命令模式(正常模式,普通模式):
完成复制,粘贴,光标移动,删除等操作。 - 插入模式:
完成代码等内容的输入; - 底行模式:
完成文件保存或退出,也可以进行替换,找字符串,列出行号。
以上三种模式的切换方式:
提出问题: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」:屏幕往“前”移动半页
- 按「shift」+「r」(实际为R):进入replace模式
- 按 r ,#r :替换当前光标所在内容
- 按shift + ~ :大小写转换
高效操作之删除:(在命令模式运行)
“x” : 删除光标所在位置的一个字符
“#x” : 删除光标所在位置向后的#个字符
“X”(shift + x):删除光标所在位置之前的一个字符
“#X”(#+shift + x):删除光标所在位置之前的#个字符
“dd”:删除光标所在行,其实是剪切操作
“#dd”:删除光标所在行向下数#行,其实是剪切操作
高效操作之复制:
“yy” :复制光标所在行到缓冲区
“#yy”:复制光标所在行向下数#行到缓冲区
“p”:将缓冲区内的字符粘贴到光标所在位置
“#p”:粘贴n次
高效后悔药之“撤销”:
“u” : 撤销,回到上次操作,多次按“u”,多次恢复
“ctrl + r” : 反撤销,撤销的恢复
2.1.2 底行模式操作
(完成搜索,保存,退出,甚至程序运行,使用man手册等)
- “#” :输入任意一个数字 + 回车键 跳转到想要的行
- “set nu” : 显示行号
- “set nonu” : 取消显示行号
查找字符:
- “/搜索词”:搜索关键字,按n依次向下寻找
- “?搜索词”: 搜索关键字,按n依次向上寻找
保存文件:
“w”:保存文件
“wq”:保存并退出
“q”:退出
“w/q+!”:!感叹号 强制操作
底行模式的运行程序
- !gcc test.c
- ! ls
- ! ll
- ! ./a.out
- 总结 !cmd
- !man printf # 查看man手册
底行模式分屏:
- vs filename #分屏文件 (光标移动Ctrl + ww,或者还有ctrl w + h/L)
- 如 vs test.c (可以多个文件分屏)
2.1.3 vim的一些补充
- vim test.c +8 光标定位到出错附近
- !vim :打开最近的文件,上次的文件
- shift + zz :大写的ZZ,保存退出
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 # 上面生成的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
以上是关于三Linux工具(vimgcc/g++ gdbMakefile)的主要内容,如果未能解决你的问题,请参考以下文章