在上一节中我们成功地运行了Hello World程序,并且没有遇到任何错误,但在实际编程中,“bug”或者说错误都是普遍存在的。如果我们在写一个想要输出1到10的程序,结果却输出了0到9,这时候我们该怎么办呢?一般我们会再看一遍程序,找找哪里写错了,但是很多情况下我们并不能发现自己的代码中的逻辑错误。这个时候,我们就需要调试(Debug)了。
调试,就是我们在已知程序每一步骤期望结果的条件下,通过观察实际结果从而发现程序错误的过程。用菜谱来打比方,我们看着菜谱去做一道蒸蛋,期望做出黄色的蒸蛋,结果照着菜谱做出来的却是白色的蒸蛋。这时候我们仔细查看了一遍菜谱,没觉得哪里奇怪,于是就只能重新来一遍,看看中间哪个步骤出了错。结果,我们在准备蛋液的时候发现蛋液是白的,这跟预想的不符。这时我们着重看了菜谱的前几行,发现上面写着“将鸡蛋打到碗内后,把蛋黄挑出来”,就这样,我们用调试的办法找出了问题。
接下来,我们会通过修改Hello World程序来简单地讲解调试。在此之前,我们先来了解一下Visual Studio中的断点功能和调试界面。如图2.3.1所示,在代码编辑窗口的左侧有一块空白的条形区域,单击对应的行的空白处就会创建一个断点。断点的作用就是让程序在运行到这个位置时暂停,而在暂停的时候我们可以反复地观察各个变量以及其他程序状态的值。
在图2.3.1的右上角我们可以看到红线标出的“本地Windows调试器”按钮,按下按钮之后我们就会进入到Visual Studio的调试模式。
图2.3.1 添加断点和调试按钮
为了更好地演示调试,如图2.3.1所示,我们可以在main()函数的一开始添加两行代码,然后单击“本地Windows调试器”或者按下F5。(www.xing528.com)
进入到调试模式后会出现如图2.3.2中所示的几个新的窗口。例如,右下角的“调用堆栈”窗口显示的是当前暂停到的函数和行数,以及调用当前函数的函数,直到程序的入口。这在多函数的复杂程序中非常有用,因为有时出错的不是当前函数,而是外层函数传进的参数,这些概念会在后面的章节中进行讲解。
图2.3.2中左下角的几个可以互相切换的窗口会显示不同变量的值,一般情况下观察“自动窗口”中的值就足够了,但是在复杂程序中我们也需要自己输入需要观察的值甚至是复杂的等式。Hello World程序一开始定义了一个名为a的整数,值为2,然后又将a加上1并让b等于这个运算结果。在这里我们可以看到a的值是2,而b的值是3(=2+1)。
如果要暂停到其他语句,我们可以设置新的断点,或者点击图2.3.2中右上角的弯曲箭头形状的单步调试键(快捷键为F10),一步步地运行;如果要结束调试,按下红色方形的停止键(快捷键为Shift+F5)即可。
以上就是对调试的简单介绍,在后面的章节中笔者还会介绍更高级的调试技巧。
图2.3.2 Visual Studio 2017的调试窗口
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。