第15章C程序上机调试指导及实验.docx

上传人:b****5 文档编号:12064882 上传时间:2023-04-16 格式:DOCX 页数:45 大小:222.87KB
下载 相关 举报
第15章C程序上机调试指导及实验.docx_第1页
第1页 / 共45页
第15章C程序上机调试指导及实验.docx_第2页
第2页 / 共45页
第15章C程序上机调试指导及实验.docx_第3页
第3页 / 共45页
第15章C程序上机调试指导及实验.docx_第4页
第4页 / 共45页
第15章C程序上机调试指导及实验.docx_第5页
第5页 / 共45页
点击查看更多>>
下载资源
资源描述

第15章C程序上机调试指导及实验.docx

《第15章C程序上机调试指导及实验.docx》由会员分享,可在线阅读,更多相关《第15章C程序上机调试指导及实验.docx(45页珍藏版)》请在冰豆网上搜索。

第15章C程序上机调试指导及实验.docx

第15章C程序上机调试指导及实验

 

第15章C程序上机调试指导及实验

C语言是编译型语言,用它写的程序在运行前必须经过编译、连接等过程,对于语言学习者来说,实验环节尤其重要,学习者必须通过上机实验操作才能加深对书本上理论知识的理解,才能融会贯通,培养程序调试能力是取得良好上机实验效果的关键。

这章主要就BorlandTurboC3.0来介绍C程序上机实验及程序调试的有关知识。

15.1TurboC3.0系统简介

TurboC3.0是BORLAND公司在1990年推出的面向对象的程序设计平台。

它既可编译运行面向对象的C++程序(扩展名为cpp的源程序文件),又可编译运行ANSI标准的C程序(扩展名为c的源程序文件)。

TurboC3.0提供了—个功能齐全、使用十分方便的开放式集成开发环境(IntegratedDevelopmentEnvironment),它集程序的编辑、编译、连接、调试和运行为一体,具有速度快、效率高、功能强、能与已有的TurboC代码高度兼容等优点,为用户开发软件提供了理想的环境。

1.系统运行环境

TurboC3.0可运行于IBMPC系列的计算机上,其中包括XT、AT和PS/2,以及其他与IBMPC兼容的计算机。

TurboC3.0要求DOS2.0以上版本的操作系统支持和至少640K的内存。

监视器为80列即可。

对机器外部存储器最低的要求是一个硬盘驱动器和一个软盘驱动器。

TurboC3.0支持鼠标器。

2.TurboC3.0的安装

TurboC3.0的系统文件可以存放在三张1.2M字节的高密软盘上。

在1#安装盘上有一个名称为INSTALL.EXE的自动安装程序,运行它后,用户可以在安装向导的指引下完成TurboC3.0系统的安装。

安装时该程序将检查计算机硬件并且适当地配置TurboC3.0系统,根据需要创建目录并且把文件拷贝到硬盘上。

安装操作是自动进行的,在需要配合时安装程序会提醒用户应做的操作。

安装TurboC3.0按下列步骤操作:

(1)把1号安装盘插入到驱动器A,在windows环境下,运行A盘中的install.exe文件。

(2)当显示安装屏幕(如图15-1所示)时,按回车键。

(3)按照屏幕提示操作,完成余下的安装过程。

安装完毕之后,INSTALL程序将提醒你阅读README文件,这个文件中包含有TurboC3.0的最新信息。

图15-1TurboC3.0安装界面

15.2TurboC3.0的集成开发环境使用简介

15.2.1TurboC3.0的启动

假设TurboC3.0系统安装在E:

\TC30目录下。

在Windows环境下,运行E盘TC30目录下的BIN子目录下的TC.EXE文件,就可以启动TurboC3.0。

系统启动界面如图15-2所示。

图15-2TurboC3.0的启动界面

15.2.2TurboC3.0IDE的基本操作

TurboC3.0集成开发环境包含窗口(window)、菜单(menu)、对话框(dialogbox)和状态行(statusline)。

其中菜单又分为下拉菜单和弹出菜单两种。

在集成开发环境下,一般有三种工作状态,它们分别是编辑状态、菜单状态和编译程序信息查询状态。

工作时光标可在编辑窗、菜单窗和编译程序信息窗跳转。

编辑窗是编辑C源程序文件的窗口;菜单项命令可用于设置环境选择项或指示TurboC3.0去执行某个任务,如装入一个C源文件、编译一个C程序等;编译程序信息窗用来显示编译和连接程序过程中出现的各种出错信息,编译和连接过程中的每一个警告或出错信息都将在该窗口列出。

1.进入菜单状态及工作窗口转换

按F10进入主菜单状态。

在主菜单状态下,移动光标键可定位要选择的菜单,按Enter键完成选择,或者用高亮度的大写字母直接选择一个主菜单选项。

大多数主菜单选项还会有自己的下拉子菜单,一些子菜单还含有弹出式菜单,用光标键可对它们进行选择(用户也可以通过鼠标器来完成选择操作)。

按Alt和主菜单选项的首字母(F、E、S、R、C、D、P、O、W、H)可直接进入主菜单状态,并选中相应主菜单选项。

例如,按Alt+F可进入File选项子菜单。

按ESC键退出菜单状态,并进入前次工作状态。

按F6可完成多个窗口(如编辑窗口与编译程序信息窗口)之间的切换。

按Alt+F5可从集成开发环境屏幕切换到输出屏幕,以便查看程序运行输出结果。

在输出屏幕按任意键后返回集成开发环境屏幕。

按F5可以放大/缩小当前活动窗口。

当要退出TurboC3.0返回DOS,选择File选项下的Quit或直接按Alt+X。

若是要暂时退出TurboC3.0环境,进入DOS环境运行DOS命令,可以选择File选项下的DOSshell。

要从DOS环境下重新回到TurboC环境,在DOS提示符下键入Exit回车即可。

2.源程序的编辑及用户文件操作

使用F3键或File选项下的Open命令,可以装入一个已存在的C源文件,也可用File|New来创建一个新的源程序文件。

在编辑窗口,用户可以输入或编辑修改源程序代码。

TurboC3.0的集成开发环境为用户提供的编辑器专用于编辑源程序文件。

它可以完成文本的插入、删除、块操作、查找、替换等编辑操作。

集成开发环境编辑器的编辑命令与一些常用文字编辑软件类似。

用户编辑的源文件及编译连接过程中产生的目标文件和可执行文件可以指定存放在某个盘的某一目录下,通过File选项下的Changedir可以选择用户文件目录。

编辑好的C源文件可以存盘,存盘的方法是按F2键或File选项下的Save。

3.编译、连接并运行C程序

在集成开发环境下,建立一个新的可执行文件的一般步骤为:

(1)设置工作环境以指示编译程序和连接程序在何处寻找和保存有关文件。

工作环境的设置是在主菜单下选择Options选项,从而指定TurboC的标准包含文件、库文件、输出文件以及源文件所在的路径。

例如,若TurboC3.0安装在E盘根目录下的TC30子目录下,我们选择Options选项下的Directories,然后将Includedirectories和Librarydirectories分别设置E:

\TC30\include和E:

\TC30\lib。

如设置错误,将导致编译程序和连接程序找不到所需文件而出错。

(2)把相应的C源文件装入到编辑窗中。

如果一个C程序由多个源文件组成,则需建立一个由所有源文件组成的工程文件。

(3)对C程序进行编译并连接,产生目标文件和可执行文件。

对编辑窗中编辑好的C源文件进行编译连接的方法是按F9键,或选择Compile菜单下的MakeEXEfile,该过程将产生.OBJ目标文件和.EXE可执行文件。

编译连接过程如果出现错误,这些错误信息将显示在编译程序信息窗内,同时把含有该错误的源文件行用高亮度显示。

查出错误后,按F6键从编译程序信息窗进入编辑窗对C源文件进行修改,修改好后再次进行编译并连接,直到编译连接通过。

这一过程是程序调试的语法错误排除阶段。

程序中存在的错误有语法错误和逻辑错误两大类。

所谓程序调试是指发现和修改程序中存在的错误的过程。

编译连接通过后,程序才可以运行,运行的方法是按Ctrl+F9或Run菜单选项下的Run。

在运行时,如果IDE发现C源文件没有编译连接,则自动完成编译、连接和运行的全过程。

对编译连接所建立的可执行文件也可以回到DOS命令提示符下运行。

在集成开发环境下运行程序后,可以按Alt+F5或Window菜单项下的Userscreen将集成开发环境屏幕切换到输出屏幕,查看程序运行的输出结果,在输出屏幕按任意键后可返回集成开发环境屏幕;也可以选择Windows菜单项下的Output子菜单,打开一个观察输出结果的窗口,该窗口与其他窗口之间可通过F6键进行切换。

仔细分析运行结果,如果运行结果不正确,则需返回去再次检查并修改程序。

这一过程是程序调试的逻辑错误排除阶段。

一个C程序正确运行通过后,可以继续编辑、编译、连接、调试、运行另一个C程序。

15.2.3TurboC3.0的热键

热键也称为快捷键,即能够立即完成某一功能的键。

表15-1列出了TurboC3.0的最常用的一些热键。

其他的热键读者可以在联机帮助文档中找到相关使用说明。

表15-1TurboC3.0的最常用的热键

菜单项

功能

F1

Help|Contents

显示帮助窗口

F2

File|Save

保存活动窗口中编辑的文件

F3

File|Open

显示打开文件对话框

F4

Run|GotoCursor

执行程序到光标所在行

F5

Window|Zoom

放大(或还原)活动窗口

F6

Window|Next

在所有已打开窗口中循环切换

F7

Run|TraceInto

调试程序,并跟踪进入函数内部

F8

Run|StepOver

调试程序,并单步执行完函数调用

F9

Compile|MakeEXE

将活动窗口中的文件或项目编译为EXE文件

F10

选择主菜单

15.2.4TurboC3.0的主菜单

TurboC3.0IDE的菜单结构由主菜单和下拉菜单组成。

主菜单共有11个菜单项(包括≡、File、Edit、Search、Run、Compile、Debug、Project、Option、Window、Help),每个菜单项都有一个下拉菜单。

下拉菜单中的菜单命令又分为三种:

命令后有省略号(…)的,表示选择此命令后将出现一个对话框;命令后面是一个箭头的,表示选择该命令将展开另一级菜单;没有这两者的菜单项选择时直接完成集成开发环境中的一个操作命令。

15.3TurboC3.0的菜单命令

1.文件子菜单(File)

使用File菜单中的相关命令项可以在IDE下打开多个编辑窗口,完成对多个源程序文件进行创建、保存、修改及打印等操作,以及转到DOS状态和退出TurboC3.0IDE。

如图15-3所示。

New:

打开一个新的编辑窗口,用于创建一个新的文件。

Open:

打开一个文件选择对话框,用于选择要编辑的文件。

Save:

对当前活动编辑窗口的文件进行存盘。

Saveall:

将所有编辑窗口的文件进行存盘。

Changedir:

设置当前工作驱动器和工作目录。

DOSshell:

临时退出IDE,进入DOS状态;要从DOS状态回到IDE,键入exit即可。

Quit:

退出TC3.0。

2.运行子菜单(Run)

运行子菜单如图15-4所示。

Run菜单提供了执行用户程序、跟踪调试程序及结束调试状态等功能。

Run:

运行程序。

Programreset:

撤消当前的调试操作,释放分配给被调试程序的内存空间,关闭被调试程序已打开的所有文件。

Gotocursor:

不设置永久断点,使程序运行至光标所在行。

若运行时在光标所在行之前遇到永久断点,就停止执行,此时只有再用此命令。

Traceinto:

逐条语句执行(每按一下F7执行一条语句),并且跟踪进入调用函数内部。

Stepover:

逐条语句执行(每按一下F8执行一条语句),并且不跟踪进入下一级调用函数。

Arguments:

允许用户输入程序运行的DOS命令行参数。

3.编译子菜单(Compile)

编译子菜单可以编译活动编辑窗口内的文件,或者make、build一个项目。

如图15-5所示。

Compile:

将当前活动编辑窗内的文件编译为obj目标文件,但不连接。

Make:

将已定义项目文件或当前活动编辑窗口内文件的源程序编译并连接为EXE文件。

该命令只有在程序不是最新时,即被改动过才重新编译并连接。

Link:

将obj文件连同必要的库文件(.lib)进行连接得到EXE文件。

Buildall:

编译并连接项目中的所有文件,而不论这些文件是否修改过。

4.选择项子菜单(Options)

选择项子菜单可以设置集成环境的工作方式。

主要包括编译器、连接器、库和包含目录、程序运行时参数的设置等。

如图15-6所示。

其中Directories(目录)项用于告诉TurboC到哪里寻找要编译、连接的文件、源文件以及设置输出文件所在的目录。

详细操作项如下:

Includedirectories:

包含目录。

用于回答包含文件所在的路径。

若TurboC3.0安装在E盘根目录下的TC30子目录下,则回答E:

\tc30\include;若装在D盘根目录下的MYDIR目录下的TC子目录下,则回答D:

\mydir\tc\include。

Librarydirectories:

库文件目录。

回答库文件所在的路径,若TurboC安装在C盘根目录下的TC子目录下,则回答C:

\tc\lib。

以上两个操作如回答错误将导致编译程序和连接程序找不到所需文件而出错。

Outputdirectories:

输出目录。

设定保存编译和连接时所生成的.obj和.exe文件的路径。

5.调试子菜单(Debug)

该菜单主要针对程序调试工作而设,其下拉菜单如图15-7所示。

Inspect:

打开DataInspect对话框,这时可以输入一个要查看或修改其值的数据项或表达式。

Evaluate/modify:

对一个变量或表达式求值,并显示其结果,而且可能的话还允许修改此值。

Callstack:

打开包含有调用栈的对话框。

其中的CallStack窗口将把程序中执行到当前函数时的函数调用序列显示出来。

Watches:

包含所有控制监视点的命令。

Togglebreakpoint:

设置或清除断点。

Breakpoints:

打开一个可以控制断点使用的对话框。

6.其他子菜单

TurboC3.0的主菜单系统还包括系统子菜单(≡)、编辑子菜单(Edit)、搜索子菜单(Search)、工程子菜单(Project)、窗口子菜单(Window)、帮助子菜单(Help)等,分别如图15-8(a)~(f)所示。

 

图15-8TurboC3.0的其他子菜单

(1)≡提供IDE的刷新及转移程序的设置操作功能。

(2)Edit菜单提供剪切(Cut)、拷贝(Copy)及粘贴(Paste)选择块等功能,供编辑窗内编辑文件时使用。

(3)Search菜单提供在文件中查找、替换文本及查找函数定义等操作功能。

(4)Project菜单提供包括所有工程项目管理命令,如建立一个项目文件、在项目中增加或删除一个文件,设置工程项目选择项,查看项目中某个文件用到的include文件等。

(5)Window菜单提供对所有窗口的管理操作功能。

(6)Help菜单主要提供联机系统帮助功能。

15.4C程序调试

15.4.1程序的两种主要错误

1.语法错误

语法错误是指违背语法规定的错误,亦称为编译连接错误。

编译连接程序通常能发现这类错误,并给出“出错信息”和出错位置。

因此,这类错误比较容易发现并排除。

编译连接错误有致命错误(fatalerror)、错误(error)、警告(warning)和连接错误(linkerror)。

致命错误是指导致编译失败的重大错误;错误是指程序编译时出现的所有错误;警告是指编译器对程序中一些不妥当的用法提出的警告,此时,程序虽可以编译连接成可执行文件,但一个正确的程序不仅要求没有错误,能够执行,而且最好在编译时没有警告;连接错误是指在连接时出现的错误,经常是由于函数名书写错误或者连接程序无法找到应该连接的函数而造成的。

2.逻辑错误

逻辑错误是指程序并无语法错误,但不能得到正确的执行结果,由于这类错误具有隐含性,亦称为隐含错误。

这是由于程序设计人员编写的程序代码与原意不相同,出现了逻辑上的混乱。

例如:

sum=0;

i=l;

while(i<=10)

sum=sum+i;

i++;

该段程序无语法错误,本意是计算1至10的自然数之和,但while语句却仅仅告诉TurboC:

当i<=10时执行“sum=sum+i;”语句,而没有包括“i++;”语句。

像这种隐含错误就较难发现,这就需要使用一些调试方法和调试技巧。

3.常见错误类型

下面列举了一些初学者常易犯的错误类型,供读者参考、借鉴。

(1)忘记定义变量。

C程序要求对所有的变量都必须先定义后引用;

(2)要输入、输出的数据类型与所用格式说明不一致;

(3)使用scanf函数时忘记使用地址符;

(4)混淆“=”与“==”两个符号的区别;

(5)语句后漏添分号或在不该加的地方加了分号;

(6)复合语句忘记加花括号;

(7)引用数组元素时误用了圆括号,或将数组的长度当成可引用的最大下标值;

(8)用数组名来替代数组的所有元素,混淆字符数组与字符指针的区别;

(9)switch语句中漏写break语句;

(10)混淆字符与字符串的表示方法;

(11)没有弄清形参与实参的作用范围;

(12)混用不同类型的指针。

15.4.2调试程序的一般过程及其调试方法

1.程序调试的一般过程

(1)人工检查。

写好程序后应对程序进行人工检查,找出由于设计人员疏忽而造成的大多数错误。

(2)上机调试。

通过编译连接程序发现语法错误,可根据编译连接时在编译程序信息窗内提示的出错信息,帮助找出程序出错之处。

需说明的是,有时提示的出错行并不是真正出错的行,往往出错行在上面的一、二行中。

(3)运行分析。

程序编译连接通过了,并不保证程序完全正确,因为逻辑错误是编译连接程序发现不了的。

因此我们应当运行程序,输入程序所需数据,对得到的运行结果进行认真分析,看它是否符合要求。

若不符合,则可能是程序有逻辑错误。

检查这类错误我们可采用下面的几种方法:

①检查流程图是否有错,即算法是否正确;

②对照程序流程图,推敲程序代码是否写错;

③在程序适当位置加入一些printf函数调用语句,输出一些中间结果,观察是否正确,逐步缩小错误所在区间;

④利用系统提供的debug对程序流程进行跟踪观察。

2.程序调试的方法

TurboC集成调试器提供了一些易学易用的调试手段,包括:

单步跟踪,设置断点,观察计算表达式的值,使用调用栈等。

在程序调试过程中,往往是多种方法联合使用,才能把错误排除。

(1)利用TurboC集成调试器进行调试的几个条件:

①在Options|Debugger对话框中将Sourcedebugging开关置为on,这是一个源代码调试开关,设为on时才能使用TurboC3.0的集成调试器。

②要将Options|Compiler|AdvancedCodegeneration中的DebuginfoinOBJs选中,该设置使得调试信息能放入目标文件中。

③建议将Options|Compiler|Entry/ExitCode对话框中的Standardstackframe选中,建立标准栈结构,否则有可能阻止调用栈查看某个函数。

(2)调试方法:

①单步跟踪。

所谓单步跟踪就是让程序逐条语句执行,每执行一条语句后就将控制权交给调试人员。

单步跟踪又分为跟踪进入函数和单步执行两种,分别通过按F7或选择Run选项下的Traceinto和按F8或选择Run选项下的Stepover来实现。

②设置断点。

用户可以在某条语句位置设置一个断点,当程序执行到该语句时便会停下来,以便调试。

断点的设置有永久断点和临时断点两种。

永久断点的设置和关闭是通过选择Debug选项下的Togglebreakpoint或直接按Ctrl+F8来实现;临时断点的设置通过选择Run选项下的Gotocursor或直接按F4来实现,临时断点不需要关闭。

在调试程序时,程序运行出现死锁或陷入死循环,可以使用Ctrl+Break中止程序的运行回到编辑器。

在程序运行中遇到断点时,程序将暂停执行并且回到编辑窗口,光标定位于设置了断点的语句上,若按Ctrl+F9,程序将继续执行;按Ctrl+F2中止调试。

③查看调用栈。

通过选择Debug选项下的Callstack或直接按Ctrl+F3来实现查看调用栈,利用调用栈来观察函数调用、参数传递以及返回顺序,非常直观有效。

④观察和计算表达式的值。

在调试过程中经常要观察某些变量、表达式的值,以了解它们的当前取值及变化规律。

通过选择Debug选项下的Evaluate或直接按Ctrl+F4,可以实现观察、计算、修改某个临时表达式,它包括计算域、结果域和新值域三部分。

利用它可以对一个临时的表达式或变量的内容进行修改,以观察其变化后的结果。

在调试过程中,如果要随时监视变量或表达式的内容变化,可以使用Debug下的Watches选项进行设置。

3.调试实例

例15.1输入一行字符,分别统计其中字母、空格及其他字符的个数。

/*本例仅作调试教学用,它包含了一些错误。

*/

#include

main(){

charc;

intletter=0,space=0,other=0;

printf(Inputastring:

);

while(c=getchar()!

=\n);

if(c>=a&&c<=z||c>=A&&c<=Z)/*判断是否为字母*/

letter++;/*字母计数*/

elseif(c=)/*判断是否为空格*/

space++;/*空格计数*/

else/*否则为其他字符*/

other++;/*其他字符计数*/

printf(letter=%d,space=%d,other=%d,letter,space,other);

}

用F9键将该程序编译,信息窗出现两个警告(Warning)信息,提示主函数的第七行和第十行可能是不正确的赋值。

首先分析第七行,它的作用应该是:

读入一个字符并赋给变量c,然后判断它是否不等于\n。

由于运算符!

=的优先级高于运算符=,因此该行的作用实际上是:

先判断读入的字符是否不等于\n,然后将判断的结果(“真”或“假”,即1或0)赋给变量c。

将表达式c=getchar()!

=\n改为(c=getchar())!

=\n即可。

再来分析第十行,它的作用应该是:

判断变量c是否等于空格。

由于此处混淆了赋值运算符=与关系运算符==,因此只需将“=”改为“==”即可。

改正后,再用F9键将该程序编译,信息窗没有出现任何信息。

按Ctrl+F9运行,出现提示信息“Inputastring:

”后输入一行字符“as4@#”后回车,即:

Inputastring:

as4@#

运行后,按Alt+F5我们看到的结果是letter和space均为0,而other为1。

显然这个结果是错误的,正确的结果应该是:

letter、space、other分别为2、2、3。

我们用Run下的Stepover(F8)或Traceinto(F7)来单步跟踪该程序的执行,发现第8行至第13行的if语句只执行了一次“other++;”语句,没有重复执行。

由此可以怀疑是循环结构有问题,仔细检查发现第七行行尾有一分号,说明循环语句的循环体为空语句,而不包含下面的if语句。

改正的办法是:

将第七行行尾的分号删除。

改正后,再用Ctrl+F9运行,按如下方式输入:

Inputastring:

as4@#

运行后,按Alt+F5我们看到的结果是:

letter、space、other分别为2、2、3,这个结果是正确的。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 初中教育

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

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