VC 6.0调试功能的使用
假设准备编制进行如下计算任务的一个简单程序:在已知x=3、y=5的情况下,先计算出x与y的和s,差d,商q,模r,而后计算res=s+2d+3q+4r的值(res应该等于16)并显示在屏幕上。但编制的如下程序运行后却得出了一个错误结果“res=26”。
图3-2 程序dbgTest.cpp的跟踪调试
分析上述所编制的程序行,假设能在要输出res结果值的那一程序行(倒数第二行)处设置一个临时断点,让程序先执行到此断点处(注意设为断点的那一行尚未被执行),看一看那时各变量的动态取值情况,有可能就会找到出错的原因!基于上述分析,先将鼠标光标移动到“printf("res=%d\n", res);”那一行处(左键单击那一行任意位置),从而指定了临时性断点的行位置,而后执行“Build -> Start Debug -> Run to Cursor”选项,使程序运行到所指定行时暂停其执行,并显示出如图3-2的界面,其中的左下方窗口中就列出了当时各变量的取值情况:和s=8,差d=3(x=3,y=5,它们的差d=3肯定是错误的),商q=0,模r=3,最终结果res=26。再仔细查看程序中负责计算差d的那一个语句“d=s-y;”就会恍然大悟,原来将“x-y”误写成了“s-y”!找到了错误,此时可以通过菜单选项“Debug -> Stop Debugging”,中断当前的调试过程并返回正常的编辑状态,修改所发现的错误后,再一次执行将能得出正确结果“res=16”。
顺便指出,图3-2中显示的变量是“自动查看”方式的,即VC6.0自动显示当前运行上下文中的变量的值。如果变量比较多,自动显示的窗口比较混乱,则可以在 Watch 列表中添加自己想要监控的变量名。
上述设置临时断点(到鼠标光标那一行处)的调试手段使用起来很方便,会经常使用(也经常在到达一个断点后,又设置另一个新的临时断点)。另外也常配合使用“单步执行”的方式,来仔细检查每一步(一个程序行)执行后各变量取值的动态变化情况,如,先通过“Run to Cursor”执行到某一个鼠标光标临时断点行处,而后通过使用Debug菜单的“Step Over”或“Step Into”来进行所谓的“单步执行”,当然,每执行一步后,都要仔细观察并分析系统自动给出的各变量取值的动态变化情况,以便及时发现异常而找到出错原因。
#include <stdio.h> void main(){ int x=3, y=5; int s, d, q, r, res; s = x + y; d = s - y; q = x / y; r = x % y; res = s + 2*d + 3*q + 4*r; printf("res=%d\n", res); }
图3-2 程序dbgTest.cpp的跟踪调试
分析上述所编制的程序行,假设能在要输出res结果值的那一程序行(倒数第二行)处设置一个临时断点,让程序先执行到此断点处(注意设为断点的那一行尚未被执行),看一看那时各变量的动态取值情况,有可能就会找到出错的原因!基于上述分析,先将鼠标光标移动到“printf("res=%d\n", res);”那一行处(左键单击那一行任意位置),从而指定了临时性断点的行位置,而后执行“Build -> Start Debug -> Run to Cursor”选项,使程序运行到所指定行时暂停其执行,并显示出如图3-2的界面,其中的左下方窗口中就列出了当时各变量的取值情况:和s=8,差d=3(x=3,y=5,它们的差d=3肯定是错误的),商q=0,模r=3,最终结果res=26。再仔细查看程序中负责计算差d的那一个语句“d=s-y;”就会恍然大悟,原来将“x-y”误写成了“s-y”!找到了错误,此时可以通过菜单选项“Debug -> Stop Debugging”,中断当前的调试过程并返回正常的编辑状态,修改所发现的错误后,再一次执行将能得出正确结果“res=16”。
顺便指出,图3-2中显示的变量是“自动查看”方式的,即VC6.0自动显示当前运行上下文中的变量的值。如果变量比较多,自动显示的窗口比较混乱,则可以在 Watch 列表中添加自己想要监控的变量名。
上述设置临时断点(到鼠标光标那一行处)的调试手段使用起来很方便,会经常使用(也经常在到达一个断点后,又设置另一个新的临时断点)。另外也常配合使用“单步执行”的方式,来仔细检查每一步(一个程序行)执行后各变量取值的动态变化情况,如,先通过“Run to Cursor”执行到某一个鼠标光标临时断点行处,而后通过使用Debug菜单的“Step Over”或“Step Into”来进行所谓的“单步执行”,当然,每执行一步后,都要仔细观察并分析系统自动给出的各变量取值的动态变化情况,以便及时发现异常而找到出错原因。