Linux实验指导书

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

Linux程序设计

实验指导书

计算机应用系

2012年11月

实验一:Linux常用命令及编程环境

1.实验相关知识简述

Unix/Linux环境下使用C语言程序开发的项目主要经历设计、开发、调试、集成、部署和维护几个阶段。目前典型的开发环境,主要使用vi、emacs、gedit等文字编辑工具完成源代码的编辑工作;通过指定不同的GCC编译器编译选项指定编译结果,根据编译器提示改正程序中的语法错误,最终生成符合目标要求的可执行二进制文件;当可执行文件执行结果与预期结果不一致时,使用GDB调试器跟踪程序执行过程,查看中间变量,改正源程序中存在的逻辑错误。在大型项目管理中,由于文件较多,整个编译过程费时较长,安装、调试难度较大。为解决手工管理效率低下的问题,引入Make工具,将项目编译、安装、维护等工作以脚本的形式组织在Makefile中,从而简化项目维护成本。手工编写Makefile脚本难度较大且不利于统一规范,推荐使用Autotools工具集直接生成。本实验仅设置手工编辑、编译Linux C源代码,生成可执行文件并调试。

GNU CC(简称为GCC)是GNU 项目中符合ANSI C 标准的编译系统,能够编译用C、C++和Object C 等语言编写的源程序。GCC也可理解为一个工具集合,包含多个编译相关工具,如gcc编译C语言源程序,g++编译C++语言源程序,ld链接器等。在编译C语言程序时,可直接使用gcc指令通过配置不同的参数选项达到指定GCC工具集的目的。

GCC的常用选项如表1.1所示

表1.1 GCC常用选项

功能选项描述

与编译相关的GCC 选项-c 只是编译不链接,生成目标文件“.o”

-S 只是编译不汇编,生成汇编代码

-E 只进行预编译,不做其他处理

-g 在可执行程序中包含标准调试信息

-o file 把输出文件输出到file 里

-v 打印出编译器内部编译各过程的命令行信息和编译器的版本-I dir 在头文件的搜索路径列表中添加dir 目录

-L dir 在库文件的搜索路径列表中添加dir 目录

-static 链接静态库

-llibrary 连接名为library 的库文件

报警与出错相关的-ansi 支持符合ANSI 标准的C 程序

-pedantic 允许发出ANSI C 标准所列的全部警告信息

GCC选项-pedantic-error 允许发出ANSI C 标准所列的全部错误信息

-w 关闭所有告警

-Wall 允许发出Gcc 提供的所有有用的报警信息

-werror 把所有的告警信息转化为错误信息,并在告警发生时终止编

译过程

与体系结构相关的GCC选项-mcpu=type 针对不同的CPU 使用相应的CPU 指令。可选择的type 有i386、i486、pentium 及i686 等

-mieee-fp 使用IEEE 标准进行浮点数的比较

-mno-ieee-fp 不使用IEEE 标准进行浮点数的比较

-msoft-float 输出包含浮点库调用的目标代码

-mshort 把int 类型作为16 位处理,相当于short int

-mrtd 强行将函数参数个数固定的函数用ret NUM 返回,节省调用函数的一条指令

使用GCC注意事项:

1)GCC指令的一般格式为:Gcc [选项] 需编译的文件[选项] [目标文件] ,其中,目标文件可缺省,GCC默认生成可执行的文件名为a.out。执行时时使用指令./a.out;

2)在include 语句中,“<>”表示在标准路径中搜索头文件,““””表示在当前目录中搜索。

故代码中使用“#include”,就需要添加GCC编译选项“-I”指定myhead.h 所在路径;

3)选项“-L dir ”的功能与“-I dir”类似,在编译时指定所需库文件路径,-l指定相应的库名称。Linux下的库文件命名时规定:必须以lib字母组合开头,后接库名称。因此用-l 选项指定链接库名为libsunq.so ,在命令中选项写为-lsunq;

GDB调试相关命令汇总如表1.2所示

表1.2 GDB相关命令汇总

功能命令描述

单步执行与函数跟踪backtrace(或bt)查看各级函数调用及参数

finish 执行到当前函数返回,然后停下来等待命令

frame(或f)帧编号选择栈帧

info(或i)locals 查看当前栈帧局部变量的值

list(或l)列出源代码,接着上次的位置往下列,每次列10行list 行号列出从第几行开始的源代码

list 函数名列出某个函数的源代码

next(或n)执行下一行语句

print(或p)打印表达式的值,通过表达式可以修改变量的值或者

调用函数

set var 修改变量的值

start 开始执行程序,停在main函数第一行语句前面等待命

step(或s)执行下一行语句,如果有函数调用则进入到函数中

断点break(或b)行号在某一行设置断点

break 函数名在某个函数开头设置断点

break...if... 设置条件断点

continue(或c)从当前位置开始连续而非单步执行程序

delete breakpoints 删除断点

display 变量名跟踪查看一个变量,每次停下来都显示它的值

disable breakpoints 禁用断点

enable breakpoints 启用断点

info(或i)breakpoints 查看当前设置了哪些断点

run(或r)从头开始连续而非单步执行程序

undisplay 取消对先前设置的那些变量的跟踪

观察点watch 设置观察点

info(或i)watchpoints 查看当前设置了哪些观察点

x 从某个位置开始打印存储器的一段内容,全部当成字

节来看,而不区分哪些字节属于哪些变量

GDB使用注意事项:

1)在Gcc 编译选项中一定要加入“-g”;

2)只有在代码处于“运行”或“暂停”状态时才能查看变量值;

3)设置断点后程序在指定行之前停止;

2.实验目的

1)掌握Linux C开发过程中的基本概念;

2)掌握如GCC,GDB等开发工具的使用;

3.实验内容

将参考代码录入到greet.c文件中,编译执行后发现结果与预期不一致,请使用GDB调试,完成字符串反序输出功能;

相关文档
最新文档