三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的几种常见模式。其中先介绍最常用的三种模式:命令模式,插入模式,底行模式。

  • 命令模式(正常模式,普通模式):
    完成复制,粘贴,光标移动,删除等操作。
  • 插入模式:
    完成代码等内容的输入;
  • 底行模式:
    完成文件保存或退出,也可以进行替换,找字符串,列出行号。

以上三种模式的切换方式:

按 i/a/o ESC shift + : 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」:屏幕往“前”移动半页
  • 按「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的作用

  1. 说明其后接着是伪目标
  2. 保证总是被执行,每次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)的主要内容,如果未能解决你的问题,请参考以下文章

Linux 第三应用及测试工具

三 工具虽微小 入门不可少

三 工具虽微小 入门不可少

Linux下的tar归档及解压缩功能详解

(总结三)Linux指令学习——逻辑卷管理

Linux三阶段之二:备份服务(rsync)