




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、淮海工学院计算机工程学院实验报告书课程名: Linux程序设计 题 目: 实验一 Linux C编程工具:GCC和GDB 班 级: 软件131 学 号: 2013122870 姓 名: 王裕 评语:成绩: 指导教师: 批阅时间: 年 月 日 Linux程序设计实验报告 - 5 -一、 实验目的与要求1. 掌握Linux C开发过程中的基本概念;2. 掌握如GCC,GDB等开发工具的使用。二、 实验内容1. 将参考代码录入到test1.c文件中,编译执行后发现结果与预期不一致,请使用GDB调试,完成字符串反序输出功能。三、 参考源代码#include <stdio.h>#includ
2、e <stdlib.h>#include <string.h>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);
3、if(new_str = (char *) malloc (size + 1) = NULL) return -1; for (i = 0; i < size; i+) new_strsize - i = stri; new_strsize+1 = ' ' printf("The reversed string is %sn",new_str); free(new_str); return 0 ;四、 实验步骤步骤1. 编辑源代码test1.cmkdir test1cd test1gedit test1.c(1) 使用gedit编辑器,建议课外学习vi
4、m;(2) 分析代码中语句功能。步骤2. 编译源代码test1.cgcc test1.c -o test1 -g(1) 复习gcc常用选项;(2) 帮助学生排查编译时错误。(3) 分析输出结果步骤3. 调试test1 gdb test1(1) 回顾调试的基本方法:跟踪语句执行过程,观察执行结果;(2) 设置断点的三种基本方法: b <line_number> b <line_number> if condition_expression b <function_name>(3) 查看中间输出结果: p <var> set print elemen
5、t 0p <array_name>或<pointer>说明:GDB中查看字符串变量值可通过“set print element 0”命令,一次性显示字符串所有内容。(4) 分析中间结果,修改28行语句为new_strsize - i-1 = stri;五、 实验结果与截图1. 编写test1.c文件并编译2.设置断点,进行gdb测试跟踪变量。执行到i=27时size-i=0,str27已经超过str字符串限制,于是new_str0=0。输出new_str时,由于超过限制无法输出。所以修改程序第28行语句为new_strsize - i-1 = stri;正确的程序运行结
6、果如下图所示。六、 思考题1. 分析以下代码,完成指定范围内数值累加功能:#include <stdio.h>/*函数功能:将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 result2; result0 = add_range(1, 10); result1 = add_range(1, 100); printf("result0=%dn
7、result1=%dn", result0, result1); return 0;答:进行累加时,局部变量sum的值会被内存保存下来,会导致数值错误,要对其初始化为0。把int i,sum;改为int i;int sum = 0;2. 结构化编程经常将相近功能编译成库形式,方便调用。请查阅资料,使用GCC将一组功能相关的源文件编译成静态库或动态库?建立库文件的源文件print1.c和print2.c如下所示:/*print1.c */#include <stdio.h>void print1(int arg) printf("%dn", arg);/
8、*print2.c */#include <stdio.h>void print2(char* arg) printf("%sn", arg);调用库函数的源文件为main.c如下:/*main.c */void print1(int arg);void print2(char* arg);int main(int argc, char* argv) int i = 3; char* str = "test libary!n" print1(i); print2(str); return 0 ;生成静态库(myprint.a)并使用的基本步骤
9、步骤1:编译print1.c, print2.c生成print1.o, print2.o目标文件gcc -c print1.c print2.c步骤2:生成myprint静态库文件libmyprint.aar -r libmyprint.a print1.o print2.o步骤3:拷贝库文件libmyprint.a到/usr/lib目录下sudo cp libmyprint.a /usr/lib说明:若不将静态链接库拷贝到/usr/lib目录下,在调用该库时需通过GCC选项-L指定库文件所在路径步骤4:调用静态库文件,编译生成可执行二进制文件gcc -o main main.c -lmypr
10、int生成动态链接库(myprint.so)并使用的基本步骤步骤1:编译print1.c, print2.c生成print1.o, print2.o目标文件gcc -c -fpic print1.c print2.c注意:GCC选项“-fpic”表示独立编址,运行时可计算出相应的内部地址。步骤2:生成myprint动态链接库libmyprint.sogcc shared print1.o print2.o -o libmyprint.so步骤3:拷贝库文件libmyprint.so到/usr/lib目录下sudo cp libmyprint.so /usr/lib步骤4:调用动态库文件,编译生成可执行二进制文件gcc -o main main.c libmyprint.so七、 实验体会本次实验是Linux的第一次实验,换了一个环境,很不适应,没有鼠标操作的情况下,可以通过上下键来选择vim,gcc等操作,也极为方便了我们的操作,再有就是gdb,语言代码除了符合最基本的语法规范之外还必须符合设计者的逻辑意图,如果发现生成的可执行文件运行结果不正确,则可以通过相应的调试环境来跟踪调试,因此需要用到gd
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 注册会计师模拟试题+参考答案解析
- 教育工作会议
- 中医学课件:温里药性与应用
- 《POP广告》课件演示
- 纸制品行业安全生产法规与标准实施考核试卷
- 玻璃保温容器生产质量控制与改进措施实施策略考核试卷
- 私募股权投资尽职调查实务考核试卷
- 纸张表面处理技术考核试卷
- 礼仪用品企业市场营销策略调整与优化考核试卷
- 2025年耐磨球段项目建议书
- 2025年电工操作资格证考试复习考试题库(共583题)(含答案)
- 2025年摄影师职业技能鉴定试卷:摄影现场拍摄光线与色彩协调技巧试题
- 临床面试专业真题及答案
- 2025年公共事务管理师考试试卷及答案
- 医药职业道德课程课件
- 2025-2030中国铍行业市场发展趋势与前景展望战略研究报告
- 2025届河北省“五个一”名校联盟高三下学期4月联考物理试题(含答案)
- logo保密合同协议
- 网格员考试题及答案重庆
- 网络安全知识手册
- 消费者心理与行为附微课第2版白玉苓课后参考答案
评论
0/150
提交评论