实验一-LinuxC编程工具GCC和GDB

  • 格式:doc
  • 大小:163.25 KB
  • 文档页数:7

下载文档原格式

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

淮海工学院计算机工程学院实验报告书

课程名:《Linux程序设计》

题目:实验一

Linux C编程工具:GCC和GDB

班级:软件131

学号:2013122870

姓名:王裕

评语:

成绩:指导教师:

批阅时间:年月日

一、实验目的与要求

1.掌握Linux C开发过程中的基本概念;

2.掌握如GCC,GDB等开发工具的使用。

二、实验内容

1.将参考代码录入到test1.c文件中,编译执行后发现结果与预期不一致,请使用GDB

调试,完成字符串反序输出功能。

三、参考源代码

#include

#include

#include

int reverse_str(char *string);

int main (void) {

char string[] = "Linux C Tools : GCC and GDB";

printf ("The original string is %s \n", string);

reverse_str (string);

}

int reverse_str (char *str) {

char *new_str;

int i, size;

size = strlen (str);

if((new_str = (char *) malloc (size + 1)) == NULL) {

return -1;

}

for (i = 0; i < size; i++)

new_str[size - i] = str[i];

new_str[size+1] = ' ';

printf("The reversed string is %s\n",new_str);

free(new_str);

return 0 ;

}

四、实验步骤

步骤1.编辑源代码test1.c

mkdir test1

cd test1

gedit test1.c

(1)使用gedit编辑器,建议课外学习vim;

(2)分析代码中语句功能。

步骤2.编译源代码test1.c

gcc test1.c -o test1 -g

(1)复习gcc常用选项;

(2)帮助学生排查编译时错误。

(3)分析输出结果

步骤3.调试test1

gdb test1

(1)回顾调试的基本方法:跟踪语句执行过程,观察执行结果;

(2)设置断点的三种基本方法:

① b

② b if condition_expression

③ b

(3)查看中间输出结果:

①p

②set print element 0

p

说明:GDB中查看字符串变量值可通过“set print element 0”命令,一次性显示字符串所有内容。

(4)分析中间结果,修改28行语句为new_str[size - i-1] = str[i];

五、实验结果与截图

1.编写test1.c文件并编译

2.设置断点,进行gdb测试跟踪变量。执行到i=27时size-i=0,str[27]已经超过str字符串限制,于是new_str[0]=’\0’。

输出new_str时,由于超过限制无法输出。所以修改程序第28行语句为new_str[size - i-1] = str[i];

正确的程序运行结果如下图所示。

六、思考题

1.分析以下代码,完成指定范围内数值累加功能:

#include

/*函数功能:将low到high之间的数值累加求和*/

int add_range(int low, int high) {

int i, sum;

for (i = low; i <= high; i++)

sum = sum + i;

return sum;

}

int main(void) {

int result[2];

result[0] = add_range(1, 10);

result[1] = add_range(1, 100);

printf("result[0]=%d\nresult[1]=%d\n", result[0], result[1]);

return 0;

}

答:进行累加时,局部变量sum的值会被内存保存下来,会导致数值错误,要对其初始化为0。

把int i,sum;改为int i;int sum = 0;

2.结构化编程经常将相近功能编译成库形式,方便调用。请查阅资料,使用GCC将

一组功能相关的源文件编译成静态库或动态库?

建立库文件的源文件print1.c和print2.c如下所示:

/*print1.c */

#include

void print1(int arg) {

printf("%d\n", arg);

}

/*print2.c */

#include

void print2(char* arg) {

printf("%s\n", arg);