Linux操作系统基础作业Linux下C语言程序的编译与调试王斯 PAGE \* Arabic 3 / NUMPAGES \* Arabic 7
Linux下C语言程序的编译调试实验
学 院: 电子信息工程学院
专 业: 通信工程
姓 名: 王斯宇
学 号:
指导老师: 周围老师
完成时间: 2013年6月3日
一、实验目的
1. 熟悉Linux下C语言编译调试环境。
2. 学会使用gcc编译C程序。
3. 学会使用gdb调试C程序。
二、实验内容
1. 在Linux下,编写程序factorize.c,功能如下:
输入一个int型整数,
输出其因式分解结果。
2. 编译运行,生成可执行文件。
3. 用gdb调试该程序,找到错误并修改。
三、实验软件环境
GCC
GCC(GNU Compiler Collection,GNU编译器集合)是一套由GNU工程开发的支持多种编程语言的编译器。GCC是自由软件发展过程中的著名例子,由自由软件基金会以GPL协议发布。GCC是大多数类Unix操作系统(如Linux、BSD、Mac OS X等)的标准的编译器,GCC同样适用于微软的Windows。GCC支持多种计算机体系芯片,如x86、ARM,并已移植到其他多种硬件平台。GCC原名为GNU C编译器(GNU C Compiler),因为它原本只能处理C语言。GCC很快地扩展,并支持处理C++。后来又扩展能够支持更多编程语言,如Fortran、Pascal、Objective-C、Java、Ada、Go等。
GDB
GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。
一般来说,GDB主要帮助你完成下面四个方面的功能:
1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)。
3、当程序被停住时,可以检查此时你的程序中所发生的事。
4、动态的改变你程序的执行环境。
四、实验步骤:
1. 程序编辑
在桌面环境下新建一个文件,打开文件输入代码,保存为factorize.c,然后将其复制到在/home/文档目录下。
附:原程序代码
#include
int main(int argc, char **argv)
{
int n,i;
printf("Please enter an integer:");
scanf("%d",&n);
printf("%d=",n);
for(i=2;i<=n;i++)
{
while(n!=i)
{
if(n%i==0)
{
printf("%d*",i);
n=n-i;
}
else
break;
}
}
printf("%d\n",n);
return 0;
}
2. 编译并运行
用gcc命令编译程序通过后运行,输入18,输出结果明显是错误的
3. 调试
进入gdb环境,使用gdb命令,帮助时使用help。
在for循环处(第9行)设置断点,使用命令“b 9”。
在printf函数处(第15行)设置断点,使用命令“b 15”。
查看断点设置情况,使用命令“info b”。
运行代码,使用命令“r”。
单步运行代码,使用命令“n”。
查看暂停点变量值,使用命令“p i”或“p n”。
继续单步运行代码数次,并使用命令查看,判断i或n的值。
继续程序的运行,使用命令“c”。
从断点数据可以得知:程序一直处于while循环之中,i的数值一直为2,所以变量n的数值出现了问题,导致最终输出结果只有2。仔细检查代码后发现错误,原程序第16行“n=n-i”应改为“n=n/i”。
4. 再次编译并运行
这次输出“18=2*3*3”正确,程序编写成功
附:修改后的程序代码
#include
int main(int argc, char **argv)
{
int n,i;
printf("Please enter an integer:");
scanf("%d