1、实验二 Linux 下 C 语言开发环境及程序调试一、实验目的1、熟悉 Linux 下的 C 语言程序编译流程。2、掌握 vi、gcc、gdb 的使用。二、实验设备硬件:PC 机。软件:VMware Workstation 虚拟机、Linux 操作系统。三、实验预习要求1、gcc 编译过程及常用编译选项。2、gdb 调试器使用流程,查看文件、设置断点、单步运行等 gdb 基本命令的使用。四、实验内容及步骤1、Linux 下 C 语言开发流程及 GCC 编译器的使用。(1)启动虚拟机,进入 Linux 操作系统,然后启动终端。(2)使用 Vim 编辑源程序,练习命令模式、编辑模式、底行模式之间的
2、切换,在终端中输入 vi hello.c,编辑完成后存盘。 (注:代码自己编写)(3)练习以下编译选项的使用:gcc -E hello.c -o hello.i gcc -S hello.i -o hello.S gcc -c hello.S -o hello.o /目标文件gcc hello.o -o hello /可执行文件(4)运行程序,在终端中查看程序运行结果。2、GDB 调试器的使用。使用 Vim 编辑源程序,在终端中输入 vi test.c,输入如下源代码,编辑完成后存盘。此代码的功能为输出倒序 main 函数中定义的字符串,但结果没有输出显示,现通过调试的方式来解决程序中存在的问
3、题。程序源代码如下:#include int display1 (char *string)int display2 (char *string1)int main ()char string = “Embedded Linux“;display1 (string);display2 (string);int display1 (char *string) printf (“The original string is %s n“, string);int display2 (char *string1)char *string2;int size,i;size = strlen (strin
4、g1);string2 = (char *) malloc (size + 1);for (i = 0; i = size; i+)string2size - i = string1i;string2size+1 = ;printf(“The string afterward is %sn“,string2);(1)用 Gcc 编译:gcc -g greet.c -o greet 。(2)运行 greet:./greet ,查看输出结果是否正确。 (3)启动 Gdb 调试:gdb greet查看源代码:l在 30 行(for 循环处)设置断点:b 30在 33 行(printf 函数处)设置断
5、点:b 33。查看断点设置情况:info b运行代码:r单步运行代码:n查看暂停点变量值:p string2size - i继续单步运行代码数次,并使用命令查看,发现 string2size-1的值正确继续程序的运行:c程序在 printf 前停止运行,此时依次查看 string20、string21 ,找到程序运行结果不正确的原因。退出 Gdb:q将程序修改正确并使用 Gcc 重新编译,查看运行结果:./greet 五、可选题编程实现输入任意 2 个小于 100 的正整数 a 和 b,然后输出 100 以内能同时整除 a 和 b 的所有数,并使用 gcc 和 gdb 编译和调试。六、实验报告要求认真记录调试过程和所有调试的程序代码。