编程技能:调试03,逐过程命令与退出调试
专栏导航
本节文章分别属于《Win32 学习笔记》和《MFC 学习笔记》两个专栏,故划分为两个专栏导航。读者可以自行选择前往哪个专栏。
(一)WIn32 专栏导航
上一篇:编程技能:调试02,设置断点与删除断点
回到目录
下一篇:无
(二)MFC 专栏导航
上一篇:编程技能:调试02,设置断点与删除断点
回到目录
下一篇:无
本节前言
在上一节,我讲解了设置与取消断点的方法,也讲解了断点的概念与作用。
本节,我们来讲解一个调试指令,逐过程命令。
一. 本节代码
#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 中的源代码。并自行编译生成。
三. 逐过程命令
我们点开【调试】菜单项,展开的下拉菜单里面,有【逐过程】一项。如下图所示。

由图4 可知,逐过程命令的快捷键,是 F10 。
程序中的断点,由红色圆点来指示。某一代码行的左边存在着红色圆点,表示这一行存在着断点。而程序中的执行断点,由黄色小箭头来指示。
注意,这个执行断点的概念,是我自己临时起的名字。在本专栏里面,你可以这么来使用,在别的教程里面,你就不能这么用了。
逐过程指令,它是一个常用的调试命令。当程序以调试模式运行时,当程序停在某一断点的时候,我们若是执行了【逐过程】指令,则程序会将执行断点所在行的代码执行完毕,并停在下一行。若是执行断点所在行存在着函数调用,则【逐过程】指令会将执行断点所在行的所有的被调用函数执行完,确保将执行断点所在行的代码给执行完毕,然后停在下一行代码的位置。
假定,执行断点所在行的代码的执行,需要用户的输入,比如说C语言的 scanf() 函数,对于这种情况,那么,我们正常地输入东西就可以了。需要输入东西的时候,我们可以正常地去输入东西。除去用户输入的部分,【逐过程】指令的功能,依然是说,将执行断点所在行的代码给执行完毕,存在函数调用的话就将所有的被调用函数给执行完,程序会在下一行代码的位置上停下来。
以上,就是对逐过程指令的讲解。有些抽象,可能,你还不理解。
接下来,我们通过具体的操作,来了解【逐过程】指令。
四. 上机操作
执行【逐过程】调试指令,可以通过两种方法。第一种,是依次点击【调试】,【逐过程】菜单命令。第二种方法,是按下键盘上的功能键 F10 。
第二种方法会管用,是因为,【逐过程】指令的快捷键,便是 F10 。
我们来开始上机操作。
首先呢,请大家找到代码编辑区域的如下位置。

在图5 所示的区域,在行号12 里面的某一个位置,点击一下鼠标左键,使得文本光标停在行号12 里面。接下来,请大家按一下功能键 F9,以便在行号12 的位置设置一个断点。结果如下图所示。

接下来呢,请大家依次点击【调试】,【开始调试】菜单命令,程序启动调试,并且会停在行号 12 上面,如下图所示。


如图8 所示,黄色小箭头停在了12行的位置。
我们依次点击【调试】,【逐过程】菜单命令,以执行一次【逐过程】命令,结果如下。

如图9 所示,黄色小箭头停在了13行的位置。
在图8 里面,黄色小箭头停在了12行,表示说,12行尚未执行。而在图9 里面,黄色小箭头停在了13行,这表示说13行尚未执行,而12行代码已经是执行完了。
所以,当黄色小箭头停在12行的时候,我们执行一次【逐过程】命令,它的效果是让12行代码执行完,并停在下一行,13行。
接下来,我们按下 F10,再执行一次【逐过程】命令。结果如下图所示。

在执行本次的【逐过程】指令之前,黄色小箭头停在13行,这表示说,13行尚未执行。而在执行了【逐过程】指令之后,黄色小箭头停在了14行的位置,这表示说,14行尚未执行,而13行已执行完毕。
也就是说,本次的【逐过程】指令,它的执行效果是,让黄色小箭头所在行的代码执行完毕,并且停在下一行。
到了这里,我们应该是可以理解【逐过程】指令的部分功能了。
上面的两次使用【逐过程】指令的场合,都是说,执行断点所在行的代码,不存在着函数调用。
我们再按一次 F10,使得执行断点,也就是让黄色小箭头停在15 行。如下图所示。

这回呢,执行断点停在15行了。15行,存在着一个函数调用,调用的函数为【calcu01】。
按照我们之前的讲解,执行一次【逐过程】指令,程序应该将执行断点所在行,也就是当前的第15行代码,给执行完,而停在第16行。
那么,我们按一次 F10,看看结果如何。

如图12 所示,果然啊,第15行代码执行完毕,并且停在了16行的位置。
接下来,我们依次点击【调试】,【逐过程】菜单命令,以执行一次【逐过程】调试指令,结果如下图所示。

到了这里,我想,对于【逐过程】指令,你应该是能够理解其含义了。
我们本节的讲解任务,算是完成了,我们可以退出调试了。
如何退出调试呢?
五. 【停止调试】指令
当程序处在调试模式中,在【调试】菜单项下面,有一个子菜单项,为【停止调试】,如下图所示。

这个命令,可以让我们推出调试状态。
请大家依次点击【调试】,【停止调试】菜单命令,以退出调试状态。结果如下图所示。


接下来,请大家关闭图16所示的窗口。
结束语
本节,我们主要讲解了【逐过程】调试指令。在讲解的时候,我并没有去讲解局部变量的变化情况。这一点,以后,我准备专门来讲解。
希望大家能够学好【逐过程】调试指令。
专栏导航
本节文章分别属于《Win32 学习笔记》和《MFC 学习笔记》两个专栏,故划分为两个专栏导航。读者可以自行选择前往哪个专栏。
(一)WIn32 专栏导航
上一篇:编程技能:调试02,设置断点与删除断点
回到目录
下一篇:无
(二)MFC 专栏导航
上一篇:编程技能:调试02,设置断点与删除断点
回到目录
下一篇:无