




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验5,常用软件开发工具一、实验目的1、熟悉字符模式下的c程序编译调试环境,基本上掌握了Linux字符模式下编译工具和调试工具的使用。2,本实验要求您练习使用Linux本机文件命令、编辑器,以及在Linux的字符模式下编辑、编译和调试c程序的基本方法。二、实验内容和阶段1 gcc和g语言编译器GCC是GNU Compiler Collection(GNU计算机集合)的缩写,是世界上最重要的开放源代码软件18。因为所有其他开源项目都依赖GCC进行编译。例如,如果没有GCC,Linux就不可能。GCC在许多平台上运行。这里所说的平台是指计算机硬件芯片和其中运行的操作系统的组合。下表是运行GCC的平台。表GCC执行平台硬件操作系统阿尔法Red Hat Linux 7.1HPPAHPUX 11.0Intel x86Debian Linux 2.2、red hat Linux 6.2、FreeBSD 4.5MIPSIRIX 6.5PowerPCAIX4.3.3SparcSolaris 2.7GCC可以编译多种语言,如c、c、对象c(标准c的派生)、fortran、Java和Ada。就像gcc缩写所代表的对象一样,gcc实际上是各种编译器的统称,GCC是所有编译器的集成程序界面,在本书中GCC和GCC不区分。与此同时,GCC还可以执行代码优化,从而加快程序的执行速度。g是基于gcc构建的c语言编译器。Gcc编译过程分为四个阶段。l预处理l编译l组件l连接最简单的c语言编译示例:使用Vi创建hello.c文件$vi hello.c输入字母I,然后插入文本后的文本/* hello.c*/#includeInt main(void)Printf( Hello World! n );return 0;最后,输入文字:wq,返回命令行,然后输入以下编译命令:$ gcc hello.c (-lstddc)如果没有错误gcc,则将创建默认可执行文件a.out,并运行a.out:$ ./a.outHello World!$Gcc最多列出几页的编译选项,以及一些最常用的项目。-o可执行文件名称指定输出的可执行文件名称,而不是默认的a.out-c代表。仅编译生成o的目标文件,不链接生成的可执行文件-s代表。只编译生成s的组件文件,不链接生成的可执行文件将标准调试信息添加到-g可执行文件-Wall允许GCC发送警告型错误消息使用选项的范例:使用上述hello.c的-o,-g常规选项重新编译并运行:$gcc -g hello.c -o hello$ ./helloHello World!$GCC默认扩展文件名:.c C c语言源代码.C .cc语言源代码.I预处理的c语言源代码.ii预处理的c语言源代码.S .s汇编语言源代码.o编译后的对象代码.a .so编译后的库代码以下示例包含两个文件:main.c、calc.c。其中main.c文件的内容如下:#includeint calc(int);Int main(int argc,char* argv)Int iInput=0,io utput=0;int I=0;scanf(“% I”,iInput);While(输入0)printf( please input a positive integer! n );scanf(“% I”,iInput);I output=calc(iInput);printf(“result is :% I n”,I output);return 0;Calc.c中的文件内容如下:#includeInt calc(int iIn)Int I=0,iOut=0;IOut=iInfor(I=0);IinI)Iot=IOT * iinReturn iOut1、编译过程编译两个源代码有三种方法。一种是直接使用以下命令行完成编译、链接过程:$gcc main.c calc.c -o main在命令行中,main.c calc.c的后缀表示c编译器的调用。如上所述,gcc是gcc众多编译器的统一门户,GCC决定调用哪个编译器。-o参数将可执行文件的文件名指定为main。第二种方法是将calc.c编译为静态库,然后在编译main.c时指定静态库的位置。必须使用以下命令行将calc.c编译为中间文件calc.o:$gcc -c calc.c使用以下命令行生成静态库文件,并将calc.o添加到静态库:$ar -r libcalc.a calc.o在命令行中,-r libcalc.a参数表示创建名为libcalc.a的静态库。接下来,使用以下命令行:$gcc main.c libcalc.a -o main上述命令也可以通过以下命令执行:$ gcc main . c-l calco main-l参数可以指定库名称。其中calc使用资源库libcalc.a,lib和资源库名称之前和之后的.a表示省略,遵循命名方法。第三种方法是创建共享库,并在编译时指定共享库。首先,使用命令行将calc.c编译为calc.o。$gcc -c -fpic calc.c在命令行中,-fpic将calc.o指定为可重新分配的地址属性,pic是职位独立代码的缩写。接下来,使用calc.o创建共享库calc.so。$ gcc-share calc . oo calc . so也可以将两个命令都缩短为一行。$ gcc-shared-fpic calc . c-o calc . so最后,编译main.c以链接生成的共享库。$gcc main.c calc.so -o main2 make项目管理器Make项目管理器(GNU的名称为gmake)可以根据项目开发人员描述的项目打开发送文件Makefile自动编译和重新编译配置,自动编译复杂项目。创建项目开发文件Makefile时使用以下规则:目标1:相关性1 相关性2.命令行1命令行2.目标本体2:相依性1 相依性2.命令行1命令行2.其中目标实体是要从命令行生成的输出文件,从属关系是要在命令行输入的文件或选项、命令行序列是创建目标实体文件所需的步骤(例如编译命令)。没有特殊指定,make总是使用当前目录中的Makefile自动编译。例如,如果当前目录中有两个项目开发文件:hello.c和hello.h,则Makefile文件可以写如下:Hello: hello.oGcc hello.o -o helloHello.o: hello.c hello.hGcc -c hello.cClean:Rm hello *。o使用Make命令:$g make输入Make或make hello将生成Makefile中的所有目标文件:hello、hello.o、hello.s。$g make hello.o仅创建目标文件hello.o$g make clean是伪目标创建命令,仅删除没有从属关系的已创建目标文件。修改上述任何从属对象都会在重新创建时重新生成相应的对象,从而提高编译效率,并确保项目开发的准确性。3dgdb程序调试器GDB是GNU Project Debugger的缩写,用于调试Ada、C、C、Objective-C、Pascal和其他可在本地计算机上运行或在远程计算机上运行的语言编写的程序20。GDB几乎可以在所有UNIX和Microsoft Windows平台上运行。GDB主要可以做以下四件事(以及他们支持的其他事情):1)启动程序以指定影响程序执行的条件。2)在特定条件下指定的程序停止。3)检查程序停止时发生了什么。4)通过更改程序的特定条件,测试可能出现的软件错误,您还可以了解其他软件错误。GDB可以执行源代码级别的程序调试(编译时必须指定相应的条件)或二进制级别的程序调试。如果在Gcc编译选项中使用了-g调试选项,则编译的可执行文件将显示符号表。这些程序使用gdb跟踪调试,通过观察高级语言源代码的执行过程和变量的中间结果,可以快速排除程序执行时发生的错误。以下是包含运行时错误的c程序:该程序通过将地址传递给字符变量c来尝试在函数中指定字符,但它引用了一个空指针,该指针可能会由于运行时段错误而导致程序异常终止。Gdb可以追踪发生错误的位置,以分析错误的原因。/* debugmy.c*/#includeVoid myputc(char * cptr)* cptr=a;Printf(myputc=%cn ,* cptr);Int main(void)char c;Char * cptrc=A;my putc(cptr);return 0;使用带有-g选项的gcc编译、运行:$gcc -g debugmy.c -o debugmy$ ./debugmy区段无效$使用Gdb跟踪检查错误$ gdb。/debugmyGNU gdb red hat Linux(6 . 3 . 0 . 0-1.122 RH)版权所有2004 free software foundation,IncGdb is free software,covered by the GNU general public license,and you arewelcome to change it and/or distribute copies of it under certain conditions。type show copying to see the conditions。there is absolutly no warranty for gdb . type show warranty for details .this gdb was configured as i386-red hat-Linux-GNU .using host lib thread _ db library/lib/libthread_db.so.1 。(gdb)现在处于gdb调试状态,可以使用gdb的调试子命令跟踪程序执行。Gdb经常使用命令:List 行号列出指定行号的上下行(默认值为10行)Break 源文件名:行号设置断点启动Run调试程序Next在断点处向下运行一行Step在断点处向下运行一行,当前动作函数跟踪传入的函数Continue继续在断点上运行Print变量名打印变量的当前值Quit gdb退出现在,使用list命令验证是否调用了要调试的程序,然后输入:(gdb)列表105 void myputc(char * cptr)6 .(成语)。7 * cptr=a;8 printf(myputc=%cn ,* cptr);910 int main(vo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年教师招聘之《幼儿教师招聘》考试题库及参考答案详解【黄金题型】
- 智能门铃视频通话创新创业项目商业计划书
- 电动汽车充电网络智能调度与分配创新创业项目商业计划书
- 教师招聘之《小学教师招聘》试卷附完整答案详解(夺冠系列)
- 教师招聘之《小学教师招聘》自我提分评估附答案详解(b卷)
- 教师招聘之《幼儿教师招聘》考试历年机考真题集附答案详解(能力提升)
- 教师招聘之《小学教师招聘》能力检测(典型题)附答案详解
- 教师招聘之《小学教师招聘》考试黑钻押题带答案详解(培优b卷)
- 教师招聘之《小学教师招聘》考前冲刺测试卷讲解及参考答案详解1套
- 2025年教师招聘之《幼儿教师招聘》检测卷附答案详解【考试直接用】
- 银川文化园全民健身体育运动馆地块土壤污染状况调查报告
- 明厨亮灶协议书
- 新药研究与开发技术 课件3.新药的工艺与质量研究
- “厂中厂”安全生产管理协议书(未修改版)7篇
- 《智能制造技术》课件 第4章 智能设计
- 类风湿关节炎健康教育
- 2025年装维智企工程师(三级)复习模拟100题及答案
- 中外建筑(教学设计)浙教版六年级上册综合实践活动
- 部编人教版6年级道德与法治上册全册教学课件
- 2025年中国人保财险全系统黑龙江分公司招聘笔试参考题库含答案解析
- 学生应急突发事件处理培训
评论
0/150
提交评论