您好,欢迎访问三七文档
C语言调试方法一、建立“工程”1.启动VC++6.0安装好微软的VisualStudio6.0后,在系统的“开始”菜单的“程序”中可以启动VisualC++6.0,见图0-1。也可以在桌面上为菜单项VisualC++6.0建立一个快捷图标,如图0-2.所示。可选择这两个方法之一启动VC。2.建立工程方法一:建立空的工程后添加源文件。启动VC环境后,选择“File”菜单中的“New”项,弹出图0-3所示的对话框。其标签项自动选择为“Projects”(工程)。作为初学者,在左侧的列表中选择倒数第3项“Win32ConsoleApplication”(win32控制台应用),在右侧“ProjectName”文本框中输入欲建立的工程名称,如:Example01。在“Location”(位置)中选择工程的存放位置(最好为课程建一个总文件夹),点击“OK”,系统出现建立工程的导航对话框,如图0-4所示。图0-3创建控制台应用工程在图0-4的导航对话框中选择默认的“Anemptyproject”(空的工程),然后点击“Finish”(完成)。系统弹出相关的创建工程的信息,如图0-5所示。点击按钮“OK”后,系统创建工程,建立相关的文件夹,不过这些文件夹都是空的,系统界面类似于图0-6.。在图0-6中,窗口左侧为“Workerspace”(工作空间)窗口,下部窗口为“Output”(输出)窗口。在workerspace(工作空间)窗口中有两个视图标签:ClassView(类视图)和FileView(文件视图)。前者按照C++“类”的管理方式展现C/C++的源代码,后者按照文件的组织方式展现C/C++的源代码。点击标签的名称,可以在二者之间切换显示。接下来的操作是为工程增加一个源文件,具体步骤见第二节。方法2:建立框架工程后更改源文件在建立工程,系统弹出建立工程的导航对话框后,选择第3项,A“Hello,图0-4创建工程的导航对话框图0-5创建工程的信息World”application,然后点击“Finish”,如图0-7所示。系统创建工程后,在工作空间的ClassView视图中,打开“类树”中的Global,可以见到主函数main,双击主函数main,系统打开相应的源文件(与工程名同,扩展名为cpp),如图0-8所示。可以更改这个源文件代码为自己的程序。注意:更改时,不要将编译命令“#includestdafx.h”丢掉。注意:方法1和方法2的区别有两点:1)方法1没有建立任何文件此后可以添加.c的源文件,也可以添加.cpp源文件;2)方法2建立了程序框架和一个带主函数的.cpp源文件。..c的源文件使用c编译器,.cpp文件使用C++的编译器,二者是有区别的。二、添加源程序1.源文件的添加图0-7创建一个类似于输出Hello,World的工程图0-6创建工程后的界面按照方法一建立工程后,整个工程是一个完全空的架子,没有任何源文件。此时,单击菜单“File”,再次选择“New”,系统弹出与图0-3一样的对话框,不过,此时的对话框默认的标签是“Files”,如图0-9所示。在图0-9中,选择“C++SourceFiles”(C++源文件),在右边的File文本框中填写文件名(一定要带有扩展名,.c或.cpp,它们的编译器不同),然后单击“OK”,系统为使用者建立源文件并打开,右边的文本编辑区,就是展示源文件内容的窗口。图0-10是为工程example01添加了源文件exam01.c后,并展开了SourceFiles文件夹(单击其前面的“+”号)后的界面。图0-8创建一个类似于输出Hello,World工程的系统界面图0-9为工程建立源文件的对话框双击文件名exam01.c,可以在右边的窗口打开这个文件。若为工程添加了多个文件,则每个打开的文件对应一个窗口,这个窗口代表源文件的文本区,可以在此编写程序。例如,编辑如下代码:/*程序1*/#include”stdio.h”voidmain(){printf(“Hello,world!\n”);printf(“计算机世界,我来了!\n”);}注意:输入汉字后要及时切换回到西文输入方式,因为C语言使用的\n、引号、分号、括号等都是西文的。2.程序源文件的快速编辑采用缩进方式:将程序1键入源文件,应当采用缩进方式,如图0-11所示的两个printf行,与大括号的垂直位置相比,位置缩进了。这种方式在输入时,自然回车就可以做到。以后的编程中,分支、循环语句中也应当使用缩进方式。这种“书写”方式使程序具备有层次的美感,增强逻辑感,让人容易阅读理解程序。积极使用windows的复制-粘贴程序中表示变量、函数等等符号可以在多处大量出现,甚至一些语句也极其类似,因此,使用windows的剪贴板,可以减少击键的次数,解决快速输入的问题,还可以减少出现“两次键入的名称不同”的错误。使用剪贴板,需要事先选定文本,其设计的方法有:光标定位:除了使用鼠标定位外,可以使用键盘上的光标移动键(箭头键)、home键、end键、快捷键等进行快速光标定位。键盘右侧区域的箭头键、是水平(光标所在位置左右)移动一个字符。键盘右侧区域的箭头键、是光标在垂直位置移动一行(上下行移动)。图0-10工程添加源文件exam01.c后的界面文本选择除了用鼠标拖动选择外,双击选择可以选择一个词汇(变量名、函数名等);如果打算选择单行代码,可以在文本窗口左侧的边框上、该行的前面单击鼠标左键,即可完成单行的选择,如图0-12所示。如果打算选择多行,可在窗口左侧的边框上,按下鼠标左键进行拖动。全文操作全文选择可以使用快捷键ctrl+a。全文缩进整个源程序按照格式进行缩进可以使用快捷键alt+F8,当然,必须事先选择全文。取消与恢复前次的操作可以用快捷键ctrl+y取消;而刚刚被取消的操作可以用快捷键ctrl+z恢复。三、编译与运行1.编译当将程序1键入之后,可点击菜单“build”中的“RebuildAll”,系统会对源文件及整个工程进行编译,编译完成后再进行连接,最终生成可执行程序(.exe)。也可以点击菜单第2项或按F7生成可执行程序。如图0-13所示。系统进入编译时,在下面将出现output窗口,其中给出编译和链接过程中的语法检查信息。如果有错,给出错误信息。这些信息包括错误行、类别错误代号:错误对象名:错误原因。2.排除语法错误编译的一项任务就是排除程序中的语法错误,下面以一个计算圆的面积的程序(程序2a)为例,说明VC6.0对基本语法错误的检查。/*程序2a*/voidmain(){floatr;area;printf(本程序计算圆的面积,请输入圆的半径\n);scanf(%f,&r);area=PI*r*r;printf(半径为%.3f的圆面积为:%.3f\n,r,area);}图0-11源文件的缩进书写方式键入此程序后,经编译,在输入窗口中得到编译错误信息,如图0-14所示。其中指出,程序有两处错误,3处警告。信息较长较多时,可以滚动水平和垂直滚动条,来查看某条信息。也可以双击其中某个信息,使信息出现在最下边(蓝底白字部分)。双击某个信息的同时,在编辑框的左边框的对应行上,将出现一个蓝色箭头,指明出错的位置。错误信息的格式是:源文件路径文件名(行号):错误类别错误代号:错误对象名:错误原因。如:e:\example02\exam02.c(3):errorC2065:‘area’:undeclaredindentifer.是说:源文件exam02.c的第3行,有错误,错误代码是C2065,即’area’错误,原因是标识符没有定义。查其代码行可知,由于在变量r与area之间使用了分号。原本打算将它们都定义为float型,应该使用逗号。使用分号将使area失去类型。另一个错误是标识符PI,本意是PI作为符号常量,程序中漏写了#definePI3.14159。而关于prinft和scanf的警告是由于没有包含头文件stdio.h。最终将程序改正为程序2b,则可以通过编译。/*程序2b*/#includestdio.h#definePI3.14159voidmain(){floatr,area;printf(本程序计算圆的面积,请输入圆的半径\n);scanf(%f,&r);area=(float)PI*r*r;printf(半径为%.3f的圆面积为:%.3f\n,r,area);}注意:警告级错误不会停止编译,可以连接,也可以执行程序。而错误是必须要改正的。作为编程经验,除非错误明显,一般每改正第1个错误后就要再进行编译。若还有错,再改正第1个错误,...,直至排除全部错误。在错误列表中,“后面的”错误往往是前面的错误造成的,改了前面的错误,后面的错误有些也会跟着消逝。但有时改了前面的错误后,可能会出现更多的错误,遇到这种情况不要轻易怀疑是否前面改错了,因为可能是在改正后,下面的程序面又出现了更严重错误,而这个错误又引起了更多的新错误。3.运行程序在图0-13所示的build菜单中,有一个带有叹号图标的菜单项——Execute(执行)example01.exe,(其快捷方式为Ctrl+F5),点击它,或者按Ctrl+F5就可以直接运行程序。如图0-15就是运行时的控制台窗口。要运行程序,还有另一个方法。它与上述方法不同,叫做调试运行,在图0-13build菜单中的StartDebug(开始调试)子菜单中。这种运行方法适于分步调试程序,观察程序内部运行状况,排除错误逻辑。这样方法将在以后各章节的调试习题中加以介绍。不过两种运行程序方法的区别是,前者运行完程序后,控制台窗口等待按任意键关闭,让程序结果停留在窗口画面上。而后者则在程序运行完毕后直接关闭图0-14程序2的编译输出信息控制台程序窗口。四、调试程序1.跟踪程序的运行下面以程序3为例,看看如何跟踪程序的运行。该程序的功能是计算一个拱形门的面积,最后输出拱形门的面积和高。如图0-16,假定拱形门是由半圆和正方形相接组成。/*程序3*/#includestdio.h#definePI3.14159voidmain(){floatw,area,heigh;printf(本程序计算拱形门的面积和高,请输入拱形门的宽度\n);scanf(%f,&w);area=(float)PI*w*w/2.0;area=area+w*w;printf(宽度为%.3f的拱形门面积为:%.3f\n,w,area);heigh=w+w/2;printf(拱形门高度为:%.3f\n,heigh);}调试程序的方法主要以单步执行程序为主,也可以采用设置断点的方法,依次运行到断点之处。无论是单步还是设置断点,都是为了观察变量的内部状态,结合窗口的输出,判断程序是否按照预定的逻辑正确执行。跟踪程序运行的技术主要有使用功能键F5、F10、F11和设置断点。F10的作用是单步执行一条语句,但是不跟踪进入所调用的函数(若有的话),这叫做“stepover”——单步越过(越过),而F11的作用是单步执行,遇到函数调用时,程序执行点进入函数,这叫做“stepinto”——单步进入(步入)。F5的功能是从程序当前执行点开始一直向后执行,直到遇到断点,或执行到程序结束。F5常常配合断点的使用。建立工程、输入程序、编译无误后,按F10键,并再按2次F10键,集成环境的界面如图0-17,对应程序高级语言源程序的控制台窗口见图0-18.图0-15程序运行的控制台窗口口口图0-16拱形门w在图0-17中,源程序窗口左边框上出现的黄色箭头,代表程序即将执行的语句(尚未执行),可称之为程序当前执行点。由图0-17程序的当前执行点可见,程序已经输出一行信息,故有图0-17的执行结果。程序行将执行输入语句。在图0-17中,集成环境的下面是程序变量的显示窗口。可以见到,由于程序的当前运行点还没有执行给变量赋值语句,所以变量中的数据是混乱的。再次按F10,发现程序的运行点没有变化,这是因为程序正在执行输入语句,转向了控制台的操作,等待实际的输
本文标题:C语言调试方法
链接地址:https://www.777doc.com/doc-3818351 .html