该程序除main外,还有一个自定义函数f。若已经能确认调用f函数前计算出的res值(或s、d、q或r其中之一的结果值)不正确的话,则可像上一程序那样,在计算出res变量值的下一行(或在靠前一些的某一行)处设置断点,看到达那一断点处是否一切正常。若到达断点处的数据结果已经不正常的话,错误已经出现(出现在跟前或出现在前面,从而找到了错误或者缩小了“侦察”范围);若断点处仍然正常,可断言错误出现在后面,而后,一:可又一次通过鼠标光标往更靠后一些的适当位置设置新断点,再一次“Debug -> Run to Cursor”(一下向后“迈”过了许多行,再继续“侦察”);二:通过“单步执行”(Debug -> StepOver),在重点怀疑的那一块地方仔细地逐行进行“侦察”。
作为练习,请读者利用这一程序对上述的调试方法与手段进行多方面的灵活使用与体验!可以看出,程序调试是一件很费时费力而又非常细致的工作,需要耐心,要通过不断的实践来总结与积累调试经验。至于VC6.0提供的其他调试方法与手段,这儿就不一一介绍了。
复制纯文本新窗口#include <stdio.h> int f(int a){ int b, c; b = a + 5; c = 2*b + 100; return c; } void main(){ int x=3, y=5; int s, d, q, r, res, z; s = x + y; d = x - y; q = x / y; r = x % y; res = s + 2*d + 3*q + 4*r; printf("res=%d\n", res); z = f(36); printf("z=%d\n", z); }#include <stdio.h>
int f(int a){
int b, c;
b = a + 5;
c = 2*b + 100;
return c;
}
void main(){
int x=3, y=5;
int s, d, q, r, res, z;
s = x + y;
d = x - y;
q = x / y;
r = x % y;
res = s + 2*d + 3*q + 4*r;
printf("res=%d\n", res);
z = f(36);
printf("z=%d\n", z);
}
前面也提到过,通过“Run to Cursor”所设置并到达的断点是一个临时性的断点。实际上,VC6还提供设置与清除固定性断点的方法。设置固定性断点最简单的方法是:在某一程序行处,单击鼠标右键,在菜单中选择“Insert/Remove Breakpoint”项(通过左键单击该选项,此时该行前将出现一个圆形的黑点标志,意味着已经将该行设置成了固定断点)。