您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > VC6程序的基本调试方法
VC6程序的基本调试方法目录3严谨思维,调试程序..........................................................................................................................................13.1什么时候需要对程序进行调试.....................................................................................................................13.2对程序进行调试的基本手段和方法.............................................................................................................1(1)观察了解程序的“病症”表现..................................................................................................................1(2)弄清程序的主要工作流程..........................................................................................................................1(3)进行大致的检查,确定问题存在的模块..................................................................................................3(4)检查故障模块,确定问题并解决..............................................................................................................33.3对程序进行调试的基本手段.........................................................................................................................4(1)设置固定断点或临时断点..........................................................................................................................4(2)单步执行程序..............................................................................................................................................4(3)使用断言......................................................................................................................................................5(4)与调试相关的操作菜单:Build菜单..........................................................................................................6(5)与调试相关的操作菜单:Debug菜单........................................................................................................63.4对一个简单程序的调试过程.........................................................................................................................73.5设计合适的程序调试方案.............................................................................................................................83.6优秀程序员的基本素质——丰富的想象、严谨的思维............................................................................10(1)程序运行结果看起来对了,但并不意味着程序没有隐藏的问题.........................................................10(2)严谨思维的典范——程序员学习的榜样................................................................................................1113严谨思维,调试程序所谓程序调试,是指当程序的工作情况(运行结果)与设计的要求不一致——通常是程序的运行结果不对时,科学地(而不是凭偶然的运气)通过一定的方法、使用一定的手段来检查程序中存在的设计问题(某种逻辑错误而不是语法、链接错误,修正语法、链接错误不是调试程序要做的事)。3.1什么时候需要对程序进行调试当程序编译出错或者链接出错时,系统都将在Output输出窗口中随时显示出有关的提示信息或出错警告信息等(如果是编译出错,只要双击Output窗口中的出错信息就可以自动跳到出错的程序行,以便仔细查找)。但若编译和链接都正确,而执行结果又总是不正确时,这时就需要使用调试工具来帮着“侦察”出程序中隐藏着的出错位置(某种逻辑错误)。强调:初学者常犯的错误是认为“编译和链接”都正确,程序就应该没有问题,怎么会结果不对呢?“编译和链接”都正确,只能说明程序没有语法和拼写上的错误,但在算法(逻辑)上有没有错,还得看结果对不对。反过来讲,无论让你设计一个什么样的程序,你都只写以下几行,则“编译和链接”肯定都正确,但能实现设计的要求吗?#includestdio.hintmain(void){printf(HelloWorld!\n);return0;}事实上,程序设计的重点完全不是修正编译和链接过程中的错误——相对而言,这种工作基本没有技术含量,程序设计的主要工作是设计正确的算法。3.2对程序进行调试的基本手段和方法调试程序的方法与医生看病的道理类似:先问清基本情况,再进行大致的检查,然后分析检查的结果、确定范围,再进行专项检查,再分析检查结果,如此反复,最后确定问题所在并进行治疗、检查疗效。必须指出的是:用户调试自己的程序时,应对程序的设计(工作)思路非常清楚,知道每一段、每一行程序所应起到(尽管不见得都能实现)的作用,这是基本的前提。若自己对设计都不清楚、甚至不知道每一段、每一行程序应发挥的作用,是谈不上调试程序的。(1)观察了解程序的“病症”表现首先是看清情况,程序的任务、程序的预期表现与程序工作的实际表现,大概是什么方面的“病”——对于常见的小“病”,经验丰富的专家不用后续检查就能知道问题所在。经验当然重要,但对于初学者而言,掌握正确的调试思路则更加重要,因为初学者很难通过观察程序而发现问题所在。(2)弄清程序的主要工作流程在学习过程中设计的程序一般都不太复杂,从总体算法上总是可以划分为几个大的模块2(也可称为步骤,可以是一段程序或一个子程序——函数):接收用户的要求和任务(读取相应的参数、输入相应的数据)、对数据进行计算和处理、按格式要求输出相应的结果。对于每一个大的模块,又可以分为许多子模块。#includestdio.hintmain(void){inta[10000],i,j,num,x,tmp,mini;//从键盘读入用户输入的数据,数据存放在数组a中,num记录读入数据的个数printf(\nPleaseinputnumbers:);for(i=0;i10000;j++){scanf(%f,x);if(x=-222)//如果读入的数为结束标志,则结束输入{break;}a[i]=x;num++;//num记录已读入的有效数据的个数}//计算与处理:对数据进行从小到大排序,排序使用的方法是选择法for(i=0;inum;i++)//依次找出第0,1,2…个最小的并放到相应位置a[i]{mini=i;//开始找第i个最小的,先假定a[i]最小,mini负责记最小的所在位置for(j=i+1;jnum;j++)//从i后的所有数中,找出最小的一个,位置记入mini{if(a[j]a[mini])//如果有谁比当前认为最小的还小,则记住其位置{mini=j;}}//将找到的最小数与第i个数交换位置,实现第i个最小数到位tmp=a[i];a[mini]=a[i];a[i]=tmp;}//输出计算、处理的结果printf(Output:\n);for(i=1;i=num;i++);//依次输出第1个到最后一个数{printf(%-6d,a[i]);//如果当前为第6个数或最后一个数,则不输出“,”而换行if(i%6!=0&&i!=num){printf(\n);}else;{printf(,);}}}例如程序3-1是有问题的,它是为了实现以下功能(其中的注释写明了主要模块的功能以3及每个模块的实现方法):①程序运行时先显示Pleaseinputnumbers:,再从键盘上读入一组整数(只考虑int型),数与数之间只使用空格或回车作分隔。数可正可负,最多10000个,但若读入的数为-222时,则表示输入结束且-222不算在该组数内。②对这一组数按从小到大的顺序进行排序。③将排序后的这一组数输出到屏幕上,输出格式为每行6个数,数与数之间使用逗号(,)分隔,两个逗号之间的宽度(不算逗号)为6且使用左对齐格式。注意,行尾没有逗号。程序的运行效果应类似地如图3-1所示,其中的1001208972-19200500210235624123478234-234-2342346235247823-341123423-222是从键盘输入的内容。图3-1程序运行效果示例(3)进行大致的检查,确定问题存在的模块检查的任务,就是查看程序的实际工作状态(屏幕输出是否正确、各变量的值是否正确)与预期的设计是否一致,若不一致,则肯定有问题。对于较长、较复杂的程序,检查时不应从开始一行一行检查,这种方法效率低、不科学,也不易发现问题。正确的方法是:先分大模块检查,确定大模块有无问题,再针对有问题的大模块,检查其内部的工作过程。例如,对于程序3-1,应先检查输入完成时工作是否正确,即让程序运行至“计算与处理”时暂停(从键盘输入一组数据),查看相应的结果(这段程序的运行目的就是将输入数据存放至数组a中并由num记录数据个数,因此应检查数组a和num的内容)是否正确,若不正确,则至少找到一部分问题。排除输入的故障后,则可让程序运行到“输出”时暂停,检查相应的结果(即数组a中的数据是否按要求排好顺序)。在检查过程中,用户应根据自己的经验,灵活调整检查策略,提高工作效率,例如可以使用二分法定位故障,也可观察后估计问题位置再进行检查。(4)检查故障模块,确定问题并解决对于复杂故障模块内部的运行检查
本文标题:VC6程序的基本调试方法
链接地址:https://www.777doc.com/doc-2866029 .html