实验三 编辑器 vi 、编译器 gcc 和调试器 gdb 的使用
实验目的
掌握编辑器 vi的基本操作,能够使用 vi 来编辑 C 语言源程序;学习indent缩进排版程序的使用;掌握用 gcc 进行编译;掌握用gdb进行调试
实验原理
1. vi和vim简介
Vi的使用相关博文
1.1 vi
1.2 vim
vim 是从 vi 发展出来的一个文本编辑器,支持 代码补全、编译 及 错误跳转 等方便编程的功能特别丰富,在程序员中被广泛使用,被称为 编辑器之神
2. vi的三种工作模式
2.1 命令模式
- 敲击键盘上的
ESC 进入 - 打开文件首先进入命令模式,是使用
vi 的 入口 - 通过 命令 对文件进行常规的编辑操作,例如:定位、翻页、复制、粘贴、删除……
- 在其他图形编辑器下,通过 快捷键 或者 鼠标 实现的操作,都在 命令模式 下实现
2.2 末行模式
- 敲击键盘上的
: 进入 - 要退出
vi 返回到控制台,需要在末行模式下输入命令 - 末行模式 是
vi 的 出口
命令 | 英文 | 功能 |
---|
w | write | 保存 | q | quit | 退出,如果没有保存,不允许退出 | q! | quit | 强行退出,不保存退出 | wq | write & quit | 保存并退出 |
2.3 编辑模式
3. vi的基本操作
3.1 vi打开/新建文件
vi [file]
vi test.c
vi new.c


vi [file] +[line]
vi test.c +3

PS:如果只带上 + 而不指定行号,会直接定位到文件末尾
3.2 vi光标移动
1) 上、下、左、右
命令 | 功能 | 手指 |
---|
h | 向左 | 食指 | j | 向下 | 食指 | k | 向上 | 中指 | l | 向右 | 无名指 |

2) 行内移动
命令 | 功能 |
---|
w | 向后移动一个单词 | b | 向前移动一个单词 | 0 | 行首 | ^ | 行首,第一个不是空白字符的位置 | $ | 行尾 |
3) 行数移动
命令 | 功能 |
---|
gg | 文件顶部 | G | 文件末尾 | [line]gg | 行首,第一个不是空白字符的位置 | [line]G | 行首,第一个不是空白字符的位置 | :数字 | 行首,第一个不是不是空白字符的位置 |
3.3 vi整行操作
1) 删除整行
命令 | 功能 |
---|
dd | 删除当前光标所在的整行 | [num]dd | 删除当前光标开始的n整行 |
2) 复制整行与粘贴
命令 | 功能 |
---|
yy | 复制当前光标所在的整行 | [num]yy | 复制当前光标开始的n整行 | p | 将复制内容粘贴光标的后面 | P | 将复制内容粘贴至当前光标前 |
3) 撤销和恢复撤销
命令 | 英文 | 功能 |
---|
u | undo | 撤销上次命令 | CTRL + r | redo | 恢复撤销的命令 |
3.4 vi末行搜索
命令 | 功能 |
---|
/[string]+Enter | 搜索当前string,光标跳转至第一个string出现位置 | n | 光标跳转至下一个string出现位置 | shift+n | 光标跳转至上一个string出现位置 |
3.5 vi行号显示与语法高亮
命令 | 功能 |
---|
set nu | 添加行号显示 | set nonu | 取消行号显示 | syntax enable on | 显示语法高亮 | syntax off | 取消语法高亮 |
3.6 vi的异常退出
假设使用vi编辑hello.c时,出现异常退出

系统会自动生成**.swp**隐藏文件

再次使用vi进入hello.c时,会出现如下提示  按D键后,之前的编辑未生效,.swp文件也被删除  
4. indent缩进排版程序
indent程序的安装
sudo apt install indent

indent [file.c]
indent test.c

5. gcc编译器
5.1 gcc简介
GCC(GNU Compiler Collection,GNU编译器套件)是由GNU开发的编程语言译器。GNU编译器套件包括C、C++、Objective-C、Java前端,也包括了这些语言的库,如libstdc++,libgcj等。
5.2 gcc安装(以Ubuntu为例)
查看当前
cd /usr/bin
find gcc

未安装,执行下行命令
sudo apt-get install build-essential
已安装,查看当前gcc版本
gcc -v

5.3 gcc下的编译过程

gcc -E [file.c] -o [name.i]
gcc -E test.c -o test.i
vim test.i

gcc -S [file.c] -o [name.s]
gcc -S test.c -o test.s
vim test.s

gcc [file.c]
gcc test.c
./a.out
gcc [file.c] -o [name]
gcc test.c -o test.out
./test.out

6. gdb调试器
5.1 gdb简介
GDB(the GNU Project Debugger)是 GNU开源组织发布的一个强大的Linux下的程序调试工具,可以调试 C、C++、Objective-C 和 Pascal 等多种语言的程序
5.2 gdb常用命令
命令 | 示例 | 功能 |
---|
file | file [name] | 装入想要调试的可执行文件 | break | break [line] | 设置断点 | delete | delete [line] | 清除单行的单个断点 | clear | clear [line] | 清除单行的所有断点 | disable | disable [num] | 设置序号为num的断点暂时失效 | enable | enable [num] | 设置序号为num的断点重新生效 | run | run | 运行调试程序 | list | list [line1],[line2] | 查看line1-line2的源代码 | next | next | 执行一行源代码但不进入函数内部 | step | step | 执行一行源代码而且进入函数内部 | info | info [command] | 显示相关命令当前信息 | kill | kill | 结束当前调试 | print | print [var] | 在屏幕上打印var变量的值 | quit | quit | 退出gdb调试程序 |
5.3 gdb基础调试过程
-
编译文件,进入gdb调试器  -
使用list命令显示当前文件源代码  -
设置断点,显示断点信息  -
运行程序至断点1  -
单步调试运行 6. 结束当前调试  -
退出gdb调试程序
实验作业
用 vi 编辑器写一段 C 语言的程序,并对这个程序的格式进行整理,对程序进行编译,最后运行这个程序。写出你的程序和实现以上操作的全部的指令。
touch test.c
vi test.c
indent test.c
gcc test.c -o test.out
./test.out


|