预览加载中,请您耐心等待几秒...
1/5
2/5
3/5
4/5
5/5

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

VC6调试入门教程 虞铭财 本文以OJ上957题简单计算为例介绍VC6的基本调试功能。 题目在《程序设计基础2010》实验三分支结构中。 希望大家把这个代码输入到vc中,跟着本教程多调试几遍,肯定可以掌握调试的基本技巧。 文中如有错误,请指出,不胜感激!! 已有代码如下 提交到OJ上,判题结果为WA。 虽然用题目的样例输入R1也能得到正确结果19。但题目中还存在逻辑错误。 对于判题结果为WA的题目,首先大家需要去设计一些测试数据去测试你的程序,看看程 序的输出结果是否正确(比对程序输出与自己手工计算结果是否一致),本题还可以设计测 试数据,如a1,正确结果应该为f(a)+1=0,但运行程序后结果如下 说明对测试数据a1来说,程序给出了错误的结果。 需要找出程序到底哪一行出现了问题。这个时候需要调试程序。 调试程序的目的就是找出程序中的逻辑错误(希望大家都能明白语法错误和逻辑错误的区 别)。调试的最基本方法主要如下:设置断点、单步执行程序、查看程序中的变量。 1、设置断点 从代码上看,显然1-6行是没有问题的。所以我们在第7行设置断点,如果大家不确定前面 的代码是否有问题,可以在main函数的开始处设置断点。把光标移到第7行的行首,如图 所示,光标会在第7行闪烁(图上I字形所在位置)。 然后在工具栏上点击调试按钮,或者按快捷键F9。这样就在第7行设置好了断点,如 图第7行前面有一个红色的圆点。 如果再次把光标移到第7行,然后点击调试按钮或者按F9,则取消断点。所以按钮 或者F9的功能是插入或者删除断点。 备注:断点的作用是使程序在调试的时候,运行到断点所在的行(但是尚未执行该行)的时 候暂时把程序停下来,这样就可以程序运行到断点的时候查看变量的值。 2、开始调试 设置好断点后,点击工具栏上的开始调试按钮或者按快捷键F5就可以开始调试。开始 调试后如图: 大家可以发现在第7行有一个黄色的箭头,表示程序执行到该行了(再次强调一下,该行的 代码尚未执行)。 备注:在开始调试后,需要注意如果断点行前有scanf()语句,需要先在程序运行窗口先 按题目要求给定程序的输入。断点行本身就有scanf()(这个例子的断点行就有),则继续调 试。 3、单步执行 开始调试程序后,程序运行到断点行暂停,这是我们可以查看程序中的变量值,也可以继续 单步执行。在本例中我们先单步执行程序。 点击工具栏上的单步执行按钮或者按快捷键F10可以让程序执行到下一行。但是本例中 因为第7行有一条scanf()语句,按F10后大家会发现光标还是停留在第7行,这是因为程 序已经执行了第7行的命令,但是因为需要输入,所以在等待输入。这时我们切换到程序运 行窗口(就是程序运行后,那个黑黑的窗口,^_^),输入程序需要的数据,本例中我们输入 R1后按回车。如图: 在切换到vc6的代码窗口,我们可以发现这时光标已经在第8行了,如图; 4、查看变量 程序执行到第8行后,我们可以查看变量的值了。在vc的默认布局下,在vc窗口的下方有 watch窗口和variables窗口,如图 左边的是variables窗口,该窗口中显示程序出现的一些变量及其值,右边的是watch窗口, 在watch窗口中,可以添加需要查看的变量。把鼠标移到这两个窗口的上方,当光标变成 时,安装鼠标左键可以上下拖动来调整窗口的大小。 在watch窗口中,点击名称下面的空白的地方,可以输入要查看的变量,本例查看x与y的 值,分别添加x与y后,如图 可以看到x的值为'R',y的值为1。 备注:大家发现x的值比较奇怪,是82'R',这是因为x是char类型的,它的值为'R',同时 前面的82是字符'R'的ASCII值。如果有不明白,请去找ASCII码相关资料。 5、继续调试程序 继续按F10,因为在x的值为'R'的时候,表达式 的值为False,所以第8行的if语句判断条件为False,第9到12行的代码不执行,程序直 接执行到第13行,如图 继续按F10,以为第13行的判定条件成立,所以程序执行到第15行(第14行只有花括号, 直接跳过)。如图 第15行的代码是计算f(x)的值,然后把f(x)的值再保存在变量x中。继续按F10,程序到第 16行,这时我们发现watch窗口中x的发生变化了。如图 x的值变为18(ASCII码值),通过自己手工计算,题目要求的f(R)的值正好是18,所以程 序到目前为止依然都正确。 继续按F10,F10,程序执行到第20行的时候,如图 点击程序命令窗口,查看一下程序输出,如图: 本次调试结束,但是依然没有找出程序的逻辑错误。 本次调试给出了正确结果,只能说明程序对于测试数据R1来说,给出了正确结果,不能保 证所有的数据都给