ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:19.88KB ,
资源ID:7338279      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7338279.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(实验五常用软件开发工具.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

实验五常用软件开发工具.docx

1、实验五常用软件开发工具实验五、常用软件开发工具一、实验目的1、熟悉字符模式下的 C 程序编译和调试环境,基本掌握 Linux 字符模式下的编译工具和调试工具的使用;2、本实验需要综合使用 Linux 基本文件命令、编辑器的使用,练习在 Linux 的字符模式下,编辑、编译及调试一个 C程序的基本方法。二、实验内容和步骤1 gcc 和 g+ 语言编译器GCC是 GNU Compiler Collection 的缩写,它是世界上最为重要的开放源代码软件 18 。因为所有其他的开放源代码项目都依赖于 GCC进行编译。比如,没有 GCC, Linux 的产生就不会成为可能。GCC能工作在很多平台上,这

2、里所说的平台是指计算机硬件芯片和运行在其上的操作系统的组合。下表是 GCC运行的平台。表 GCC运行的平台硬件 操作系统Alpha Red Hat LinuxHPPA HPUXIntel x86 Debian Linux , Red Hat Linux , FreeBSDMIPS IRIXPowerPC AIX4.3.3Sparc SolarisGCC可以编译多种语言: C,C+,对象 C(标准 C 的派生),Fortran ,Java , Ada 。正如 GCC缩写所代表的对象一样, GCC实际上是多种编译器的统称, gcc 是所有编译器的统一的程序接口,在本书中,并没有区分 GCC和 gc

3、c 。同时, GCC也能够进行代码优化,提高执行程序的运行速度。 g+是构建于 gcc 基础上的 C+语言编译器。gcc 编译过程分为 4 个阶段:l预处理l编译l汇编l连接最简单的 C 语言编译的例子:用 vi 建立一个 文件 $vi输入字符 i, 插入文本以下文本/*/#include int main(void)printf( Hello World!n);return 0;最后输入字符 :wq, 返回命令行,键入以下编译命令:$gcc (-lstdc+)如果没有错误 gcc 将生成默认的可执行文件 , 执行 :$./Hello World!$gcc 带有多达数页的编译选项,我们仅列出最

4、常用的几项:-o 可执行文件名 指定输出的可执行文件名,而不是默认的-c 只编译生成 .o 的目标文件 , 不连接生成可执行文件-s 只编译生成 .s 的汇编文件 , 不连接生成可执行文件-g 在可执行文件中加入标准调试信息-Wall 允许 GCC发出警告型错误信息选项使用的例子 :对以上 使用 -o,-g 常用选项重新编译、执行 :$gcc -g -o hello$./helloHello World!$GCC默认的扩展文件名:.cC语言源代码.C.ccC+语言源代码.i预处理后的C 语言源代码.ii预处理后的C+语言源代码.S .s 汇编语言源代码.o 编译后的目标代码.a .so 编译后

5、的库代码下面的例子由两个文件组成: , ,其中,文件内容为:#include int calc(int);int main(int argc, char* argv)int iInput=0, iOutput=0;int i=0;scanf(%i,&iInput);while(iInput 0)printf(Please input a positive integer!n);scanf(%i,&iInput);iOutput = calc(iInput);printf(Result is:%in, iOutput);return 0;的文件内容为:#include int calc(int

6、iIn)int i = 0, iOut = 0;iOut = iIn;for(i = 0; i iIn; i+)iOut += iOut * iIn;return iOut;1、编译过程有三种方式编译这两个源程序,一是直接使用如下命令行完成编译、链接过程:$gcc -o main命令行中, 的后缀名指明了调用 c 编译器,前面讲到了 gcc 是 GCC的众多编译器的统一入口, gcc 靠后缀名决定调用什么编译器, -o 参数指定了可执行文件的文件名为 main。第二种方法是编译为静态库,编译时指定静态库的位置。需要将编译成中间文件,使用如下命令行:$gcc -c生成静态库文件,添加到静态库中,

7、使用如下命令行:$ar -r命令行中, -r 参数表示建立静态库,名字为。接下来,使用如下命令行:$gcc -o main上面这条命令也可以用下面的命令完成:$gcc -lcalc o main-l 参数可以指定库名称, 这里 calc 表示使用库, 库名字前面的 lib 和后面的 .a 被省略掉了,遵从了命名法。第三种方法是建立共享库,编译时指定共享库。首先,编译为,使用命令行:$gcc -c -fpic命令行中, -fpic 指定为可重分配地址属性, pic 是 position independence code 的缩写。接下来使用生成共享库:$gcc -shared o这两条命令也可以

8、缩减为一行:$gcc -shared -fpic -o最后编译,链接生成的共享库:$gcc -o main2 make 项目管理器make 项目管理器( GNU中的名称为 gmake )可以根据项目开发者说明的项目开发文件 Makefile 自动的进行编译配置和重复编译 , 能实现复杂项目的编译自动化。项目开发文件 Makefile 的编写使用以下规则:目标体 1 : 依赖体 1 依赖体 2 .命令行 1命令行 2.目标体 2 : 依赖体 1 依赖体 2 .命令行 1命令行 2.其中目标体是命令行要生成的输出文件,依赖体是命令行要输入的文件或选项,命令行序列是要创建目标体文件所需要的步骤,例如

9、编译命令。无特别指定, make总是使用当前目录中的 Makefile 进行自动编译。例如我们在当前目录中有两个项目开发文件和,则 Makefile 文件可以编写为:hello:gcc -o hello:gcc -cclean:rm hello *.omake 命令的使用:$g make输入 make或 make hello 将生成 Makefile 中所有的目标文件,即 hello, 。$g make将仅生成目标文件$g make clean是一条伪目标生成命令, 该目标没有依赖体, 它只执行对已生成目标文件的删除。 当我们对以上依赖体中的任意一个进行了修改, 重新 make 时仅会引发对应

10、目标体的重新生成, 从而提高了编译的效率并保证了项目开发的正确性。3 gdb 程序调试器GDB是 GNUProject Debugger 的缩写,用于调试 Ada, C, C+, Objective-C, Pascal 和其他语言编写的程序 20 ,这些程序可以运行在本地计算机上,也可以运行在远程计算机上。GDB可以运行在几乎所有的 UNIX 和微软 Windows 平台上。GDB主要能做下面 4 种事(以及由它们所支持的其他事情) :1)启动程序,指定可能影响程序运行的任何条件;2)指定程序在一定条件下停止;3)检查当程序停止时发生的事情;4)通过改变程序中的某些条件,测试可能造成的软件错误

11、,还可以由此学习其他的软件错误。GDB可以做源代码级别的程序调试(需要在编译时指定相应条件) ,也可以做二进制级别的程序调试。如果您在 gcc 编译选项中用到了 -g 调试选项, 则编译出的可执行文件就会带有符号表。 这样的程序就可以使用 gdb 跟踪调试,观察到它的高级语言源代码的执行过程和变量的中间结果,从而能快速的排除程序运行时发生的错误。以下是一个带有运行时错误的 C程序, 注意程序想通过传地址方式在一个函数中为字符变量 C 赋一个字符, 但它引用了一个空指针,这将引发运行时的段非法错误使得程序异常终止。但我们可以通过 gdb 跟踪到它产生错误的位置,从而分析出产生错误的原因。/*/#

12、include void myputc(char * cptr)*cptr = a;printf(myputc=%cn,*cptr);int main(void)char c;char * cptr;c = A;myputc(cptr);return 0;使用带 -g 选项的 gcc 编译、执行:$gcc -g -o debugmy$ ./debugmy段错误$使用 gdb 跟踪查错$ gdb ./debugmyGNU gdb Red Hat Linux (6.3.0.Copyright 2004 Free Software Foundation, Inc.GDB is free softwa

13、re, 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 absolutely no warranty for GDB. Type show warranty for details.This GDB was configured as i386-redhat-linux-gnu.Usin

14、g hostlibthread_db library/lib/.(gdb)现在进入了 gdb 调试状态,可以使用 gdb 的调试 子 命令跟踪程序的执行。 Gdb 常用命令:list 行号 列出指定行号的上下行(缺省为 10 行)break 源程序文件名: 行号 建立一个断点run 启动被调试的程序next 从断点处向下执行一行step 从断点处向下执行一行,当前行为函数则跟踪进入函数continue 继续从断点处连续执行print 变量名 打印变量当前值quit 退出 gdb让我们现使用 list 命令查看一下要调试的程序是否已经装入,输入:(gdb)list 105void myputc(

15、char * cptr)67*cptr = a;8printf(myputc=%cn,*cptr);910int main(void)1112char c;13char * cptr;14c = A;我们将断点设在第 15 行上,输入:(gdb) break 15Breakpoint 1 at 0x80483c0: file , line 15.开始跟踪执行,输入:(gdb) runStarting program: /root/ipc/debugmyReading symbols from shared object read from target memory.done.Loaded s

16、ystem supplied DSO at 0xffffe000Breakpoint 1, main () at :1515 myputc(cptr);程序执行到第15 行上停止,我们采用单步执行跟踪错误的发生,输入:(gdb) stepmyputc (cptr=0x9bbe40 U211 WVS203 L 215s) at :77*cptr = a;程序执行一行,进入函数 myputc, 再单步执行一行,再次输入:(gdb) stepProgram received signal SIGSEGV, Segmentation fault.0x0804838d in myputc (cptr=0x9bbe40 U211 WVS203 L 215s) at :77 *cptr = a;此时 gdb 报告在执行改行时接受到一个段失败的信号,由此我们可以知道错误发生在该行上,进一步我们可以推断出该错误的发生是因为指针 cptr 未初始化, 它指向了一个非法的地址,所以在向它指向的单元赋值时发生了段错误。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1