专栏导航
本节文章分别属于《Win32 学习笔记》和《MFC 学习笔记》两个专栏,故划分为两个专栏导航。读者可以自行选择前往哪个专栏。
(一)WIn32 专栏导航
上一篇:编程技能:调试01,调试介绍
回到目录
下一篇:无
(二)MFC 专栏导航
上一篇:编程技能:调试01,调试介绍
回到目录
下一篇:无
本节前言
在上一节,我们简单地介绍了一下调试的概念。
对于调试这一块,单凭着一点概念,应该还是很难理解其含义的。这一块,我认为,它是需要你在实践中,逐渐地来积累经验与提升技能的。
本专栏所讲解的调试知识,是作为一个入门,来教大家几条基本的调试指令。
本节,我们要教大家的是【开始调试】指令,【继续】命令和【切换断点】指令。
标题中,说的不是设置断点与删除断点吗?没有讲【切换断点】啊?其实,【切换断点】在不同的时机,分别等价于设置断点和删除断点。我们在讲解具体的知识的时候,大家应该就能理解了。
一. 本节代码
来看一下本节所用到的代码。
#include <stdio.h>int calcu01(int x, int y);
int calcu02(int x, int y);
int calcu03(int x, int y);int main(void)
{int a, b, res01, res02, res03;int res;a = 10;b = 20;a++;res01 = calcu01(a, b);res02 = calcu02(a, b);res03 = calcu03(a, b);res = res01;res += res02;res += res03;return 0;
}int calcu01(int x, int y)
{int res;res = x + y;res += x;res *= y;return res;
}int calcu02(int x, int y)
{int res;res = 2 * x;res *= y;res += y;return res;
}int calcu03(int x, int y)
{int res;res = x * x * x;res -= y;res /= y;return res;
}
这就是本节所用到的代码了。代码的行数有点多,不过,并不难。相信大家很容易理解其功能。
为了方便查找和使用,我将这样的代码放在了 win32 专栏与 mfc 专栏的 Gitee 代码仓库里面了。网址如下所示。
Gitee 网址:Win32 教学课件
Gitee 网址:MFC 教学课件
两个代码仓库里面,关于本节所述的调试案例代码的路径,都是一样的。
在正式使用 Gitee 的功能之前,你可能会需要首先注册账号,如果还没有注册过 Gitee 的账号的,你可以前往下面的两个链接所示的文章,了解 Gitee 的基本使用方法。
WIn32 笔记:本专栏课件-CSDN博客
MFC笔记:本专栏课件-CSDN博客
在了解了 Gitee 的基本使用方法的前提下,你可以点击如下所示的两个链接之一。
Gitee 网址:Win32 教学课件
Gitee 网址:MFC 教学课件
点开了链接以后,来到如下所示的页面,在这里,我以 MFC 专栏课件的页面为例。

在写作本节文章的时候,我还没有往代码仓库里面传入多少代码,所以,图1中的项目很少。等到你看到本篇文章的时候,很有可能,里面的代码已经是很多很多了。
我们在网页中找到红色框线所示的文件夹,单击进入这个文件夹,结果如下图所示。

在我写作本文的时候,只在【调试案例代码】文件夹里面传入了【code1.c】一个源文件。等到你学习本篇内容的时候,有可能,我已经新增了一点源文件。别管新增了多少,你需要找到的,是这个【code1.c】,找到了它以后,单击它,然后呢,结果如下图所示。

这是 Gitee 里面展示的部分的调试案例代码,图3中的部分代码,与本节的代码块中的代码是一样的。
你可以将代码仓库给下载回去,并在相应的路径中,找到【code1.c】。
到了这里,本节所使用的调试案例代码的获取方法,我就讲完了。我接着往下讲。
二. 建立工程
请大家自行建立 C/C++ 项目,最好是使用 VS2019 来建立项目。
如果还不会用 VS2019 来建立 C/C++ 项目的话,请参考如下链接所示的文章。
Windows编程:用 VS2019 编写C语言程序-CSDN博客
在本节,我需要你将第一分节中的代码块中的代码,设置为 C/C++ 项目中的 main.c 中的源代码。并自行编译生成。
三. 【开始调试】命令
在 VS2019 的【调试】菜单下面,有一个【开始调试】命令,如下图所示。

之前,我们在编译好了项目代码以后,我们是使用【调试】菜单下面的【开始执行(不调试)】命令,来运行解决方案的。
在这里,我们尝试着点击【调试】,【开始调试】命令,来运行一下解决方案。

结果如图5所示。其实,此刻,【开始调试】和【开始执行(不调试)】的执行效果差不多,都是说,连续运行程序中的所有的代码行,弹出来一个黑窗口,一口气执行完毕。
这是因为,此时,我们尚未设置断点。如果设置了断点的话,那么,情形就会有所不同了。
请大家关闭图5 所示的窗口。
接下来,先不要关闭解决方案,我们在下一分节有用。
在进行下一分节之前,请大家记住一件事,那就是,在图4里面,【开始调试】命令右边的快捷键,F5 。记住它。
四. 设置断点
请大家点击一下代码中的行号为15 的代码中的某一个位置,让光标停在 15 行的某一个位置上,如下图所示。

在图6 的红色框线所示的区域里面,包含有文本光标。其实这个东西,在Windows编程里面,它被称作文本插入符。以后,我们也会讲解文本插入符的编程方法。
在将文本光标设置在 15 行以后,大家依次点击【调试】,【切换断点】菜单命令,过程如下图所示。


在图7里面,【切换断点】字样的右边,给出了这个命令的快捷键,F9 。这个快捷键,也请大家记住它。当然了,记不住的话,只要你还记得菜单命令的路径,那么,多看几次,你也就能记住这个快捷键了。
添加断点的一个方法是,首先点击想要设置断点的某一文本行,使得文本光标停在断点所在的代码行里面,然后呢,依次点击【调试】,【切换断点】命令,然后呢,这一代码行的左边就会出现红色实心圆点了,表明这一行设置了断点。
添加断点的另一个方法是,首先点击想要设置断点的某一文本行,使得文本光标停在断点所在的代码行里面,然后按下功能键 F9,也可以在这一代码行上面设置断点。
某一代码行设置了断点的标志是,这一代吗行的左边出现了红色的圆点。
在图8 里面,我们看到,在我们执行了【切换断点】菜单命令以后呢,在行号 15 的左边,出现了一个圆形的实心红点。出现了这个东西,就表示说,此时,我们在行号 15 的位置,设置了一个断点。
当我们在 15 行设置了断点以后,我们再次执行【调试】,【开始调试菜单命令】,结果如下图所示。


在图9里面,它没说【某某程序已退出】,那就是说,程序并未像图5那样子,全部执行完并退出。实际上,此时,程序是停在了代码中的 15 行的位置。
为啥说,此时,程序停在了15行的位置呢?
我们看一下图10,在图10 中,我们看到,在断点标记的中间,有一个黄色填充的箭头符号。这个黄色箭头符号指向的是哪一行,就表示程序停在了哪一行代码上面。
注意,这里所说的程序停在某一行,它是说,这一行尚未执行,而它之前的代码已经是执行完了。
在本案例中,它是说,第 15 行上面的代码,13,14行等等的代码,均已执行完毕,程序即将执行15行,而尚未执行15行的代码。
断点的功能,就是让程序在连续执行期间,遇到了断点以后,就停下来。
让连续运行的程序,停在某一个位置,断开连续执行的状态,停下来。那么,这个停下来的站点,就叫做断点。
在 VS2019 里面,断点会用红色的圆点来标记。
程序停在断点上以后,接下来,它会等候我们的调试指令。此时,我们再来尝试着去执行【调试】,【开始调试】菜单命令。如下图所示。

此时,我们在【调试】菜单里面找不到【开始调试】这一子菜单项了,然而,我们可以见到【继续】这一项。在之前,我们让大家记过一个知识点,【开始调试】的快捷键是 F5,而图11 中的【继续】命令的快捷键也是 F5 。
个人觉得,其实【开始调试】命令和【继续】命令是一回事,都是说,让程序连续运行,直到遇到了断点,才停下来。
但是呢,在不同的场合,快捷键 F5 所对应的名称却是不一样的。当程序尚未启动调试的时候,那么,【调试】菜单项下面,会显示着【开始调试】命令。而当我们点击过【开始调试】,启动了调试运行的命令以后,假定程序停在了某一个断点上,那么,这回,【调试】菜单下面,就会显示有【继续】命令,而不是显示【开始调试】命令了。
接下来呢,我们依次点击【调试】,【继续】命令。过程如下。



图13 和图14 的红色框线标记的位置,都显示了【已退出】字样,表明程序执行完毕,已退出。
请大家关闭图14 所示的黑窗口。
程序在停在了 15 行上的断点以后,我们点击了【调试】,【继续】命令以后,程序会执行到退出,这是因为,此时,我们在程序中,仅仅设置了 15 行这一个断点而已。如果,我们再多设置几个断点,程序就不会那么快地退出了。
这回呢,我们添加几个断点,让程序慢点退出。
我们在程序的第17行和第21行分别设置断点,如下图所示。

这回呢,我们来执行【调试】,【开始调试】菜单命令,预计,程序会停在15行的位置,程序的执行情况如下所示。

果然啊,第15行的断点上,出现了黄色箭头。
接下来,我们执行一次【继续】命令。不过,这一次,我们不采用菜单命令的方式,而是采用快捷键的方式。【调试->继续】命令的快捷键是 F5,我们按下 F5,观察执行效果,结果如下。

看到了没?这回,黄色小箭头停在了 17 行的位置了。这表明,此时,程序停在了第17行上面,第17行尚未执行。
我们再按一次 F5,结果如下。

如图18 所示,黄色小箭头出现在了第 21 行的断点上面。这是本程序的执行流程中的最后一个断点了。
既然是最后一个断点,那么,再次按下 F5 键,那么,程序就该退出了。我们按一下 F5,结果如下。


如图19 和图20 所示,程序果然是退出了,并且呢,程序代码中,不存在黄色小箭头了。
我们关闭程序执行用的黑窗口。
到了这里,【开始调试】,【继续】,F5,这几个命令,我就算是讲完了。
接下来,我们来看一看,如何删除断点。
五. 删除断点
如何来删除断点呢?
请大家来跟我一起操作。首先呢,我们点击一下代码区域的第 15 行的某一个地方,使得文本光标停在第 15 行里面,如下图所示。

接下来呢,请大家依次点选【调试】,【切换断点】菜单命令,结果如下。

看到了没?图21 里面,15行的左边还有断点标记的,而到了图22 里面,断点标记就没有了。
当某一行原本已经设置了断点的情况下,我们先将文本光标定位在这一断点所在行上面,然后执行【调试->切换断点】命令,就会删除这一行的断点。
我们再来试着用另一种方法删除断点。
首先呢,点击 17 行的某一个位置,使得文本光标定位在 17 行,如下图所示。

然后呢,请大家按下 F9,结果如下。

,如图24所示,17 行上的断点标记被删除了。
我们之前让大家记忆过,【调试->切换断点】的快捷键是 F9 。这一次,我们正是用快捷键 F9,取代了【调试->切换断点】菜单命令。
这样一来,设置断点和删除断点的方法,我就都讲完了。
六. 切换断点的简易方法
我再来讲解一下切换断点的简易方法。
此时,在程序中,还剩下21行一个断点了。
在代码行号的左边,有一个竖着的,很窄灰色的区域,如下图所示。

当我们点击这一区域时,鼠标点击的位置的水平方向上,位于哪一个代码,哪一个代码行就会相当于执行了一次【调试->切换断点】菜单命令。
我们点击一下 21 行左边的窄灰色区域,结果如下图所示。

我们再来点击一下 20 行左边的窄灰色区域,结果如下图所示。

这样一来,20行就设置了断点。
切换断点命令,它的效果是,如果某一代码行原本没有断点,则执行这一命令,会设置断点。如果某一代码行原本是有断点的,则执行这一命令会删除该行断点。
我们再来设置几个断点,如下图所示。

如图 28 所示,我设置了 4 个断点。在实际项目中,我们可能会设置更多的断点。
假定我们想要删除所有的断点。该怎么办呢?
我们当然可以一个一个地删除断点。然而,我们还可以采用更省事的方法。
请大家跟我做,依次点击【调试】,【删除所有断点】菜单项,过程如下图所示。


在图30 里面,我们点击 【是】,结果如下图所示。

如图31 所示,这回呢,我们所设置的 4 个断点,就被一次性地清除了。
结束语
本节知识,应该是不难的。只是,篇幅大了一点。
希望大家能够学好本节知识。
专栏导航
本节文章分别属于《Win32 学习笔记》和《MFC 学习笔记》两个专栏,故划分为两个专栏导航。读者可以自行选择前往哪个专栏。
(一)WIn32 专栏导航
上一篇:编程技能:调试01,调试介绍
回到目录
下一篇:无
(二)MFC 专栏导航
上一篇:编程技能:调试01,调试介绍
回到目录
下一篇:无