03.Vi编辑器

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

编译并运行上述代码,会产生一个严重的段错误 (Segmentation fault)如下:
Linux操作系统
37

为了更快速地发现错误所在,可以使用gdb进行跟 踪调试,方法如下:
首先,在对源代码进行编译时加入“-g”选项
Linux操作系统

Linux操作系统
26





在为Linux开发应用程序时,绝大多数情况下使用的都是C语言, 因此几乎每一位Linux程序员面临的首要问题都是如何灵活运 用C编译器。 GCC不仅功能非常强大,结构也异常灵活。最值得称道的一点 就是它可以通过不同的前端模块来支持各种语言,如Java、 Fortran、Pascal、Modula-3和Ada等。 开放、自由和灵活是Linux的魅力所在,而这一点在GCC上的 体现就是程序员通过它能够更好地控制整个编译过程。在使用 GCC编译程序时,编译过程可以被细分为四个阶段: ◆ 预处理(Pre-Processing) ◆ 编译(Compiling) ◆ 汇编(Assembling) ◆ 链接(Linking)
30

看看如下illcode.c程序,这段代码写得很糟糕,仔 细检查一下不难挑出很多毛病:
#include <stdio.h> void main(void) { long long int var = 1; printf("It is not standard C code!\n"); }
main函数的返回值被声明为void,但实际上应该是int 使用了GNU语法扩展,即使用long long来声明64位整数, 不符合ANSI/ISO C语言标准 main函数在终止前没有调用return语句。
编译:gcc hello.c -o hello 运行:./hello Hello world 结果:Linux programming!
Linux操作系统
28
从 程序员的角度看,只需简单地执行一条GCC命 令就可以了,但从编译器的角度来看,却需要完成 一系列非常繁杂的工作。 首先,GCC需要调用预处理程序 cpp,由它负责展 开在源文件中定义的宏,并向其中插入“#include” 语句所包含的内容。 接着,GCC会调用ccl和as将处理后的源代码编译 成目 标代码。 最后,GCC会调用链接程序ld,把生成的目标代码 链接成一个可执行程序。

Linux操作系统 29

第一步是进行预编译,使用-E参数可以让GCC在预处理 结束后停止编译过程:

第二步是将hello.i编译为目标代码,这可以通过使用 -c 参数来完成:
gcc -E hello.c -o hello.i 此时若查看hello.i文件中的内容,会发现stdio.h的内容确实都插 到文件里去了,而其它应当被预处理的宏定义也都做了相应的处理。

Linux操作系统
33

在处理警告方面,另一个常用的编译选项是-Werror,它要求 GCC将所有的警告当成错误进行处理,这在使用自动编译工具 (如Make等)时非常 有用。如果编译时带上-Werror选项,那 么GCC会在所有产生警告的地方停止编译,迫使程序员对自己 的代码进行修改。只有当相应的警告信息消除时,才 可能将编 译过程继续朝前推进。执行情况如下:
一般模式
按『 : / ? 』三个中 的任何一个按键 按下『i, I, o, O, a, A, r, R』 等任何一个字母

命令模式
按ESC返回 一般模式
编辑模式
Linux操作系统
11

编辑模式:在一般模式中可以进行删除、复制、贴上等等 的动作,但是却无法编辑文件内容的! 要等到你按下『i, I, o, O, a, A, r, R』等任何一个按键之后才会进入编辑模 式,按下这些按键时,在画面的左下方会出现『INSERT 或 REPLACE 』的字样,此时才能进行编辑。
Linux操作系统
18
Linux操作系统
19

命令模式:在一般模式当中,按下『 : 』 『 / 』 『? 』 三个中的任何一个按键,就可以将光标移动到最底下那一 行。在这个模式当中, 可以提供你『搜寻资料』的功能, 而读取、存盘、大量取代字符、离开 vi 、显示行号等功 能也可以在此模式中完成
Linux操作系统
5
学生学习本课后应该具有的职业能力: 熟练掌握Vi编辑器的使用方法 能够利用Vi编辑器进行文字编辑工作 能够使用gcc进行C/C++程序的编译和调试 能够独立完成基本的Linux程序
Linux操作系统
6


Vi编辑器包含的主要内容有:
Vi编辑器的启动与退出 Vi编辑器的工作模式 Vi编辑器的常用命令
一般模式
按『 : / ? 』三个中 的任何一个按键 按下『i, I, o, O, a, A, r, R』 等任何一个按键
命令模式
按ESC返回 一般模式
编辑模式
Linux操作系统
20

一般模式下输入如表所示的命令均可进入编辑模 式
Linux操作系统
21

使用下表中的命令可以在Vi中进行文件相关的操作, 注意冒号“:”无需重复输入
03.Vi编辑器 主讲:高光
1. 项目课题引入 2. Vi编辑器的使用方法
3. Linux中C语言程序的编译
4. Linux中C语言程序的调试运行 5. 现场演示案例

在Linux操作系统中设计一个C语言程序,当程序 运行时显示如下的运行效果:
Linux操作系统
3

完成本项目需要解决的问题:
◦ 1、在Linux下我们使用什么工具进行程序和文字的编辑。
gcc -c hello.i -o hello.o GCC默认将.i文件看成是预处理后的C语言源代码,因此上述命令 将自动跳过预处理步骤而开始执行编译过程,也可以使用-x参数让 GCC从指定的步骤开始编译。

最后一步是将生成的目标文件链接成可执行文件:
gcc hello.o -o hello
Linux操作系统

Linux操作系统
8
在系统提示符后输入Vi和想要编辑(或建立)的文 件名,便可进入Vi 如果只输入Vi,而不带文件名,也可以进入Vi

Linux操作系统
9
要退出Vi,在命令模式下键入如图所示命令。 其中:wq和:x是存盘退出,而:q是直接退出。可以用:w 命令保存文件后再用:q 退出,或用:wq或:x命令退出。 如果你不想保存改变后的文件,你就需要用:q!命令, 这个命令将不保存文件而直接退出Vi
Linux操作系统
22

使用下表中的命令可以进行字符串的相关操作
Linux操作系统
23

使用下表中的命令,可以进行文本的相关操作
Linux操作系统
24
使用下表中的命令,可以执行shell中的命令
Linux操作系统
25
Linux应用程序表现为2种特殊类型的文件:可执行 文件和脚本文件。可执行文件是计算机可以直接运 行的程序,相当于Windows的.exe文件。脚本文件 是一组指令的集合,相当于Windows的.bat批处理 文件。 在POSIX兼容的系统中,C语言编译器被称为c89。 Linux尽量实现相关标准,c89,cc和gcc这些命令 全都指向系统的C语言编译器,通常是GNU C编译 器,或者称为gcc。


对Linux程序员来讲,GCC给出的警告信息是很有价值的,它们 不仅可以帮助程序员写出更加健壮的程序,而且还是跟踪和调 试程序的有力工具。 建议在用GCC编译源代码时始终带上-Wall选项,并把它逐渐培 养成为一种习惯,这对找出常见的隐式编程错误很有帮助。
Linux操作系统 34

我们编写的程序经过编译之后可以使用如下方法进 行运行:
Linux操作系统
31

当GCC在编译不符合ANSI/ISO C语言标准的源代码时,如果加上 了-pedantic选项,那么使用了扩展语法的地方将产生相应的警告 信息: 需要注意的是,-pedantic编译选项并不能保证被编译程序与 ANSI/ISO C标准的完全兼容,它仅仅只能用来帮助Linux程序员 离这个目标越来越近。或者换句话说, -pedantic选项能够帮助 程序员发现一些不符合 ANSI/ISO C标准的代码,但不是全部,事 实上只有ANSI/ISO C语言标准中要求进行编译器诊断的那些情况, 才有可能被GCC发现并提出警告。

Linux操作系统
32

除了-pedantic之外,GCC还有一些其它编译选项也能够产生有用 的警告信息。这些选项大多以-W开头,其中最有价值的当数Wall了,使用它能够使GCC产生尽可能多的警告信息:

GCC给出的警告信息虽然从严格意义上说不能算作是错误,但却 很可能成为错误的栖身之所。 一个优秀的Linux程序员应该尽量避免产生警告信息,使自己的代 码始终保持简洁、优美和健壮的特性。
◦ 2、在Linux操作系统中我们如何编译和运行C程序 ◦ 3、我们编写的程序如何在Linux操作系统中进行调试。
Linux操作系统
4
学习本课需要实现的教学目标: 掌握Vi编辑器的启动和退出 掌握Vi编辑器的工作模式 熟悉Vi编辑器的基本命令 掌握C/C++编译器gcc的使用 掌握Linux下程序设计的一般方法
Linux操作系统 27


在用户当前目录,使用Vi编辑器输入如下代码,并保存 成文件hello.c: #include <stdio.h> int main(void) { printf ("Hello world, Linux programming!\n"); return 0; } 然后执行下面的命令编译和运行这段程序:
Linux操作系统
7
Vi是Visual interface的简称,它可以执行输出、删 除、查找、替换、块操作等众多文本操作 用户可以根据自己的需要对Vi进行定制,这是其他 编辑程序所没有的。 Vi不是一个排版程序,它不像WORD或WPS那样可 以对字体、格式、段落等其他属性进行编排,它只 是一个文本编辑程序。 Vi是全屏幕文本编辑器,它没有菜单,只有命令。 Vi功能强大,但体积很小,从完整版到只有几M的 精简版Linux,甚至是Android系统都支持Vi
./生成的程序名 (其中“./”表示当前的工作目录) 将生成的程序目录加入到系统搜索路径的PATH变量(我 们将在Shell编程课程中进行介绍)

如果编译过程出现错误,需要进行程序的调试,这 时我们需要使用的工具是gdb
Linux操作系统
35
对于Linux程序员来讲,GDB(GNU Debugger) 通过与GCC的配合使用,为基于Linux的软件开发 提供了一个完善的调试环境。 默认情况下,GCC在编译时不会将调试符号插入到 生成的二进制代码中,因为这样会增加可执行文件 的大小。如果需要在编译时生成调试符号信息,可 以使 用GCC的-g或者-ggdb选项。 使用任何一个调试选项都会使最终生成的二进制文 件的大小急剧增加,同时增加程序在执行时的开销, 因此调试选项通常仅在软件的开发和调试阶段使用。
一般模式
按『 : / ? 』三个中 的任何一个按键 按下『i, I, o, O, a, A, r, R』 等任何一个字母
命令模式
按ESC返回 一般模式
编辑模式
Linux操作系统
12
Linux操作系统
13
Linux操作系统
14
Linux操作系统
15
Linux操作系统
16
Linux操作系统
17

Linux操作系统
10

Vi有3种基本工作模式:一般模式、编辑模式和命令 模式。
一般模式:以 vi 打开一个档案就直接进入一般模式了(这是默 认的模式)。在这个模式中, 你可以使用『上下左右』按键来 移动光标,你可以使用『删除字符』或『删除整行』来处理档 案内容, 也可以使用『复制、贴上』来处理你的文件数据。

36
Linux操作系统

我们使用如下代码说明gdb的使用:
#include <stdio.h> int main(void) { int input =0;
}பைடு நூலகம்

printf("Input an integer:"); scanf("%d", input); printf("The integer you input is %d\n", input); return 0;
相关文档
最新文档