LINUX实验三

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

北京林业大学

2013学年—2014学年第2学期Linux应用实验任务书专业名称:班级:

姓名:学号:

实验题目:实验三GNU下编译器和调试器的使用初步

实验环境:Linux环境

实验目的:

通过调试一个有问题的程序,进一步熟练使用Vi操作,而且熟练掌握Gcc 编译及Gdb的调试命令,通过对有问题程序的跟踪调试,进一步提高发现问题和解决问题的能力。

实验内容:

GNU GCC:

编译单个源文件

#include

#include

int main(int argc,char**argv)

{printf(“Hello world!\n”);

exit(0);

}

输入:wq保存并退出

用gcc编译

简单编译两个源文件

#include

void goodbye_world(void);

{printf(“Goodbye,world!\n”);

}

使用gcc的“-c”标记来编译支持库代码:

#gcc-c文件名.c

这一过程的输出结果是一个名为文件名.o的文件,它包含适合连接到一个较大程序的已编译目标代码。

创建一个简单的示例程序,它包含一个调用上个程序里的goodbye_world的main 函数。

#include

void goodbye_world(void);

int main(int argc,char**argv)

{goodbye_world();

exit(0);

}

使用gcc编译这个程序:

#gcc-c main.c

现在有了两个目标文件:message.o和main.o。它们包含能够被Linux执行的目标代码。要从这个目标代码创建Linux可执行程序,需要再一次调用gcc 来执行连接阶段的工作:

使用外部函数库

GCC常常与包含标准例程的外部软件库结合使用,几乎每一个Linux应用程序都依赖于由GNU C函数库GLIBC。

//请编写代码计算sin30度+sin60度+sin90度,并完成编译,执行

提示:头文件的使用且GCC编译时使用数学库参数。函数库位置随系统的不同而不同,但它一般会位于目录/lib或/usr/lib中,在这些目录中还有数以百计的其他必需的系统函数库。

GNU GDB:

(1)使用Vi编辑器,将以下代码输入到名为greet.c的文件中。此代码的

原意为输出倒序main函数中定义的字符串,但结果显示没有输出。代码

如下所示:

(2)使用Gcc编译这段代码。

(3)运行生成的可执行文件,观察运行结果。

(4)使用Gdb调试程序,通过设置断点、单步跟踪,一步步找出错误所在。

(5)纠正错误,更改源程序并得到正确的结果。

实验步骤:

(1)在工作目录上新建文件greet.c,并用Vi启动:vi greet.c。

(2)在Vi中输入以上代码。

图1

(3)在Vi中保存并退出:wq。

(4)用Gcc编译:

(5)运行greet:./greet,输出为:

可见,该程序没有能够倒序输出。

(6)启动Gdb调试:

(7)查看源代码并进行调试。

将原来有错的程序经过Gdb 调试,找出问题所在,并修改源代码,输出正确的倒序显示字符串的结果。实验步骤中请适当截图。GNU 调试器是一个功能非常强大的工具。要了解更加详尽的知识,建议阅读GNU 调试器手册。LINUX 环境下的编程实现:

请用深度优先搜索或广度优先搜索对上图的文件系统树进行遍历。#include

#include

#include

using namespace std;

void DFS(int G[8][8],int v);

int visit[8]={0,0,0,0,0,0,0,0};

string name[8]={"/","dirC","dirA","my3.dat","dirB",

"my1.dat","my2.dat","my1.dat"};

int main()

{

/*0

12

3456

7

*/

int G[8][8]={0,1,1,0,0,0,0,0,

0,0,0,1,0,0,0,0,

0,0,0,0,1,1,1,0,

0,0,0,0,0,0,0,0,

0,0,0,0,0,0,0,1,

0,0,0,0,0,0,0,0,

0,0,0,0,0,0,0,0,/

dirC dirA

dirB my3.dat my1.dat

my2.dat

my1.dat

0,0,0,0,0,0,0,0};

DFS(G,0);

return0;

}

void DFS(int G[8][8],int v)

{

int w=0;

cout<";

visit[v]=1;

for(w=0;w<8;w++)

if((G[v][w]!=0)&&(visit[w]==0))

DFS(G,w);

}

实验中存在的问题及解决办法:

树的遍历使用VC6.0可编译运行,移植到Vi后出错。

相关文档
最新文档