工学实验四LINUX下C语言使用编译与调试实验2_第1页
工学实验四LINUX下C语言使用编译与调试实验2_第2页
工学实验四LINUX下C语言使用编译与调试实验2_第3页
免费预览已结束,剩余1页可下载查看

下载本文档

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

文档简介

1、1)vi的工作模式输入模式输入以下命令即可进入aAiIoO命令模式在输入模式下,按:q!:wqZZ:x:w:q实验四:LINUX下C语言使用、编译与调试实验一、目的:1、练习并掌握Linux提供的vi编辑器来编译C程序2、学会利用gcc、gdb编译、调试C程序3、学会使用make工具二、内容1、编写C语言程序,用gcc编译并观察编译后的结果,运行生成的可执行文件。2、利用gdb调试程序。3、学习编写makefile,并进行编译。三、操作1、文件编辑器vi进入vi,直接执彳fvi编辑程序。例:#vitest.c显示器出现vi的编辑窗口,同时vi会将文件复制一份至缓冲区(buffer)。vi先对缓

2、冲区的文件进行编辑,保留在磁盘中的文件则不变。编辑完成后,使用者可决定是否要取代原来旧有的文件。vi输入模式:在光标之后加入资料在该行之末加入资料在光标之前加入资料在该行之首加入资料新增一行于该行之下新增一行于该行之上ESC可切换到命令模式。命令模式下,可选用下列指令离开vi离开vi,并放弃刚在缓冲区内编辑的内容将缓冲区内的资料写入磁盘中,并离开vi同wq同wq将缓冲区内的资料写入磁盘中,但并不离开vi离开vi,若文件被修改过,则要被要求确认是否放弃修改的内容,此指令可与:w配合使用(3)命令模式下光标的移动h左移一个字符j下移一个字符k上移一个字符l右移一个字符0(零)移至该行的行首$移至该

3、行的行尾A移至该行的第一个字符处H移至窗口的第一行M移至窗口中间那一行L移至窗口的最后一行G移至该文件的最后一行W,w下一个单词(W忽略符号)B,b上一个单词(B忽略符号)(4)命令模式下的编辑命令dd删除当前光标所在行yy复制当前光标所在行p将复制的内容粘贴在光标所在的位置后p将复制的内容粘贴在光标所在的位置前x删除当前光标字符X删除当前光标之前字符u撤消-重做2、GNUC编译器1)使用gcc通常后跟一些选项和文件名来使用gcc编译器。gcc命令的基本用法如下:gccoptionsfilenames命令行选项指定的编译过程中的具体操作2)gcc常用选项当不用任何选项编译一个程序时,gcc将建

4、立(假定编译成功)一个名为a.out的可执行文件。选项含义:-oFILE指定输出文件名,在编译为目标代码时,这一选项不是必须的。如果FILE没有指定,默认文件名是a.out.例如,#gcctest.c编译成功后,当前目录下就产生了一个a.out文件。也可用-o选项来为即将产生的可执行文件指定一个文件名来代替a.outo例如:#gcc-ocountcount.c此时得到的可执行文件就不再是a.out,而是counto-cGCC仅把源代码编译为目标代码。默认时GCC建立的目标代码文件有一个.o的扩展名。-E对文件进行预处理-S对文件进行编译,生成汇编代码。-O对源代码进行基本优化。这些优化在大多数

5、情况下都会使程序执行得更快。-g在可执行程序中包含标准调试信息。-Wall允许发出GCC能提供的所有有用的警告,也可以用-W(warning)来标识指定的盲口。-lname链接静态库3) -Ldir库文件的搜索路径执行文件格式:./可执行文件名例:# ./a.out./count例子mypow.c:定义mypow()函数unsignedlonglongmypow(unsignedintx,unsignedinty)unsignedlonglongres=1;if(y=0)res=1;elseif(y=1)res=x;elseres=x*mypow(x,y-1);returnres;powtes

6、t.c:调用mypow()函数#include<stdio.h>#include<stdlib.h>intmain(intargc,char*argv)(unsignedintx,y;unsignedlonglongres;if(argc<3)|(sscanf(argv1,"%u",&x)!=1|(sscanf(argv2,"%u",&y)!=1)(printf("Usage:powbaseexponentn");exit(1);res=mypow(x,y);printf("%u

7、A%u=%un",x,y,res);return0;编译过程:# gcc-cmypow.c# arrcsvlibpow.amypow.oa-mypow.o# gcc-opowtestpowtest.c-L.-lpow# ./powtestUsage:powbaseexponent# ./powtest2101) 2a10=10243、gdb调试工具调试编译代码为了使gdb正常工作,必须使你的程序在编译时包含调试信息。调试信息里包含你程序里的每个变量的类型和在可执行文件里的地址映射以及源代码的行号。gdb利用这些信息使源代码和机器码相关联。在编译时用-g选项打开调试选项。2) gdb基

8、本命命令描述file装入欲调试的可执行文件kill终止正在调试的程序list列出产生执行文件的源代码部分next执行一行源代码但不进入函数内部step执行一行源代码并进入函数内部run执行当前被调试的程序quit终止gdbwatch监视一个变量的值而不管它何时被改变break在代码里设置断点,使程序执行到这里时被挂起make不退出gdb就可以重新产生可执行文件shell不离开gdb就执行UNIXshell命令(1) 源程序gdbtestl.c,分析程序的功能,如果出错,要求用gdb进行调试并给出修改方案。基本步骤:3)调试程序编译:gcc-g-ogdbtestlgdbtestl.c运行:./g

9、dbtestl开始调试:gdbgdbtestl#include<stdio.h>intadd_range(intlow,inthigh)staticinti,sum;for(i=low;i<=high;i+)sum=sum+i;returnsum;intmain(void)intresult100;result0=add_range(1,10);result1=add_range(1,100);printf("result0=%dnresult1=%dn”,result0,result1);return0;源程序greet.c,功能:按照正序和逆序输出给定的字符串。

10、要求用gdb进行调试,分析出错的原因并给出修改方案。#include<stdio.h>#include<string.h>#include<malloc.h>voidmyprint(char*string);voidmy_print2(char*string);intmain()(charmy_string="hellothere"my_print(my_string);my_print2(my_string);return0;voidmy_print(char*string)(printf("Thestringis%sn”,s

11、tring);voidmy_print2(char*string)(char*string2;intsize,i;size=strlen(string);string2=(char*)malloc(size+1);for(i=0;i<size;i+)string2size-i=stringi;string2size+2='0'printf("Thestringprintedbackwardis%sn",string2);4、make的使用(1)用vi编辑以下程序,程序清单:main.cfunction1.hfunction1.cfunction2.hf

12、unction2.c/main.c#include"function1.h"#include"function2.h"intmain(intargc,char*argv)function1_print("hello");function2_print("world");return0;/function1.hvoidfunction1_print(char*str);/function1.c#include"function1.h"voidfunction1_print(char*str)printf("Thisisfunction1print%sn”,str);/function2.hvoidfunction2_print(char*str);/function2.c#include"function2.h"voidfunction2_print(char*str)printf("Thisisfunc

温馨提示

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

评论

0/150

提交评论