Linux程序设计入门gccgdb.doc_第1页
Linux程序设计入门gccgdb.doc_第2页
Linux程序设计入门gccgdb.doc_第3页
Linux程序设计入门gccgdb.doc_第4页
Linux程序设计入门gccgdb.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验编号: 3 四川师大LINUX程序设计实验报告 2012年10月15日计算机科学学院2010级 1班 实验名称:Linux程序设计入门 姓名: 杨军 学号: 2010110140 指导老师:张莹实验三 Linux程序设计入门1. 目的要求(1) 掌握利用文本编辑工具,生成源文件。(2) 掌握利用GCC编译工具,编译、连接生成可执行文件。(3) 能读懂Makefile文件,并能编写简单的Makefile文件。(4) 掌握利用GDB调试工具,调试可执行文件。2. 实验内容(1)编译源文件的练习l 在/root目录下创建目录,目录名:LinuxProgram。l 在LinuxProgram下,利用文本编辑器创建hello.c源文件。l 手动编译hello.c源文件,并运行。rootlocal$ gcc c hello.crootlocal$gcc hello.o o hellorootlocal$./hellol 修改hello.c文件后,手动重新编译、运行。 在hello.c中,修改printf(“Welcome you , Emdoor!n”)。 删除目标文件、可执行文件。rootlocal$rm f hello.orootlocal$rm f hello 编译后,重新运行。rootlocal$ gcc hello.o o hellorootlocal$./hellol 利用GNU make ,自动编译hello.c 利用vi创建Makefile文件,并将其保存在与hello.c相同的目录下。 利用GNU make编译并运行rootlocal$makerootlocal$./hello 修改hello.c文件后,自动重新编译、运行在hello.c中,修改printf(“Welcome you , Emdoor!n”)rootlocal$make cleanrootlocal$makerootlocal$./hello 思考:比较手动、自动编译之间的区别,并解释$ 、$、$的含义。手动:对目标文件所依赖的所有文件逐一的进行编译自动:利用make命令 来执行Makefile中存放的指令 进行自动维护编译工作$:所有依赖的文件名$:第一个依赖的文件名$:目标文件名l 多个源文件的编译 利用vi创建Makefile文件,并将其保存在与hello.c相同的目录下。 利用GNU make编译并运行rootlocal$makerootlocal$./hello 查看并记录所生成的文件和运行的结果,为Makefile文件每行添加注释。CC=gccCFLAGS=OBJS=hello1.o hello2.oall:hellohello:$(OBJS)#hello的依赖文件为hello1.o hello2.o $(CC)$(CFLAGS)$ -o $#gcc hello1.o hello2.o o hellohello1.o:hello1.c $(CC)$(CFLAGS) -c $ -o $#gcc c hello1.c hello1.ohello2.o:hello2.c $(CC)$(CFLAGS) -c $ -o $#gcc c hello2.c hello2.oclean: rm -rf hello *.o 修改Makefile文件 利用GNU make编译并运行rootlocal$makerootlocal$./hello 查看并记录所生成的文件和运行的结果,为Makefile文件每行添加注释。CFILES=$(wildcard *.c)#将所有以.c结尾的文件赋值给CFILESOBJS=$(CFILES:%c=%o)#OBJS为既有%c也有%o的文件(2)GDB/Debugger调试工具使用利用vi编辑源文件bubble.c编译源文件,并启动GDBrootlocal#gcc -g -o bubble bubble.crootlocal#gdb bubble查看当前源程序的信息(gdb) info sourceCurrent source file is bubble.cCompilation directory is /root/sampleLocated in /root/sample/bubble.cContains 32 lines.Source language is c.Compiled with DWARF 2 debugging format.Does not include preprocessor macro info.注释输出的信息含义:源文件是bubble.c编译的路径是/root/sample位于/root/sample/bubble.c共:32行C语言在函数swap、main处,设置断点。(gdb) br swapBreakpoint 1 at 0x80483d6: file bubble.c, line 11.(gdb) br 23Breakpoint 2 at 0x804844a: file bubble.c, line 23.查看断点信息(gdb) info brNum Type Disp Enb Address What1 breakpoint keep y 0x0804832e in swap at bubble.c:112 breakpoint keep y 0x08048390 in main at bubble.c:23如果希望删除在main函数上的断点,命令是: (gdb) del 2 (gdb) info brNum Type Disp Enb Address What1 breakpoint keep y 0x0804832e in swap at bubble.c:11如果希望断点设在循环中且不被频繁断下,命令是: (gdb) del 2 (gdb) info brNum Type Disp Enb Address What1 breakpoint keep y 0x0804832e in swap at bubble.c:11 (gdb) br 23 if j=5Breakpoint 3 at 0x8048390: file bubble.c, line 23. (gdb) info brNum Type Disp Enb Address What1 breakpoint keep y 0x0804832e in swap at bubble.c:113 breakpoint keep y 0x08048390 in main at bubble.c:23 stop only if j = 5执行程序。(gdb) runStarting program: /root/sample/bubbleBreakpoint 1, swap (x=0x8049524, y=0x8049520) at bubble.c:1111 temp = *x;程序已经在断点1停了下来。查看变量值x。(gdb) p x$1 = (int *) 0x8049524 #x是一个指向整数的指针,指针值是0x80495a4。(gdb) p *x$2 = 32(gdb) p *y$3 = 69单步执行(gdb) n12 *x = *y;(gdb) p temp #查看变量temp值$4 = 32(gdb) n13 *y = temp;(gdb) p *x$5 = 69(gdb) del 1 #删除断点1(gdb) cont #继续执行Continuing.Breakpoint 3, main () at bubble.c:23 #当j=5,在断点3停下23 swap(&recordj,&recordj-1);(gdb) p j$6 = 5查看排序结果(gdb) p record$7 = 12, 76, 48, 62, 94, 17, 32, 37, 52, 69请写出record数组在运行前后的结果,对比后评价程序是否运行正常?3. 主要仪器设备及软件(1) 硬件:计算机、网络(2) 软件:VMWare workstation、RedHat 9.04. 附录:程序清单1) hello.c#include int main()printf(Welcome Emdoor!n);return 1;2) hello1.c#include int main()printf(Welcome Emdoor!n);test2();return 1;3) hello2.cinclude hello2.h#include void test2(void)printf(Welcome Emdoor! hello2n);4) hello2.hvoid test2(void);5) bubble.c#include #define MAX_RECORD_NUMBER 10int recordMAX_RECORD_NUMBER =12,76,48,62,94,17,37,52,69,32;void swap(int * x , int * y )i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论