实验二Linux下C语言开发环境及程序调试 (1)

时间:2022-04-08 03:10:04 阅读: 最新文章 文档下载
说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。
实验二LinuxC语言开发环境及程序调试

一、实验目的

1、熟悉Linux下的C语言程序编译流程。 2、掌握vigccgdb的使用。 二、实验设备

硬件:PC机。

软件:VMware Workstation虚拟机、Linux操作系统。 三、实验预习要求

1gcc编译过程及常用编译选项。

2gdb调试器使用流程,查看文件、设置断点、单步运行等gdb基本命令的使用。

四、实验内容及步骤

1LinuxC语言开发流程及GCC编译器的使用。 1)启动虚拟机,进入Linux操作系统,然后启动终端。

2)使用Vim编辑源程序,练习命令模式、编辑模式、底行模式之间的切换,在终端中输入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)运行程序,在终端中查看程序运行结果。 2GDB调试器的使用。

使用Vim编辑源程序,在终端中输入vi test.c,输入如下源代码,编辑完成后存盘。此代码的功能为输出倒序main函数中定义的字符串,但结果没有输出显示,现通过调试的方式来解决程序中存在的问题。程序源代码如下:

#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 (string1);

string2 = (char *) malloc (size + 1); for (i = 0; i <= size; i++) string2[size - i] = string1[i]; string2[size+1] = ' ';

printf("The string afterward is %s\n",string2); }

1)用Gcc编译:gcc -g greet.c -o greet

2)运行greet./greet,查看输出结果是否正确。 3)启动Gdb调试:gdb greet 查看源代码:l

30行(for循环处)设置断点:b 30 33行(printf函数处)设置断点:b 33 查看断点设置情况:info b 运行代码:r 单步运行代码:n

查看暂停点变量值:p string2[size - i]

继续单步运行代码数次,并使用命令查看,发现string2[size-1]的值正确 继续程序的运行:c

程序在printf前停止运行,此时依次查看string2[0]string2[1]…,找到程序运行结果不正确的原因。

退出Gdbq

将程序修改正确并使用Gcc重新编译,查看运行结果:./greet 五、可选题

编程实现输入任意2个小于100的正整数ab,然后输出100以内能同时整除ab的所有数,并使用gccgdb编译和调试。 六、实验报告要求

认真记录调试过程和所有调试的程序代码。









本文来源:https://www.wddqw.com/doc/ff5e2c345aeef8c75fbfc77da26925c52cc59134.html