欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 会展 > 编程技能:调试04,逐语句命令

编程技能:调试04,逐语句命令

2025/4/20 11:01:54 来源:https://blog.csdn.net/2401_82825368/article/details/147354484  浏览:    关键词:编程技能:调试04,逐语句命令

专栏导航

本节文章分别属于《Win32 学习笔记》和《MFC 学习笔记》两个专栏,故划分为两个专栏导航。读者可以自行选择前往哪个专栏。

(一)WIn32 专栏导航

上一篇:编程技能:调试03,逐过程命令与退出调试

回到目录

下一篇:无

(二)MFC 专栏导航

上一篇:编程技能:调试03,逐过程命令与退出调试

回到目录

下一篇:无

本节前言

在上一节,我讲解了逐过程指令和退出调试指令。

本节,我们来讲解一个调试指令,逐语句命令。

一.    本节代码

#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

在写作本节文章的时候,我还没有往代码仓库里面传入多少代码,所以,图1中的项目很少。等到你看到本篇文章的时候,很有可能,里面的代码已经是很多很多了。

我们在网页中找到红色框线所示的文件夹,单击进入这个文件夹,结果如下图所示。

图2

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

图3

这是 Gitee 里面展示的部分的调试案例代码,图3中的部分代码,与本节的代码块中的代码是一样的。

你可以将代码仓库给下载回去,并在相应的路径中,找到【code1.c】。

到了这里,本节所使用的调试案例代码的获取方法,我就讲完了。我接着往下讲。

二.    建立工程

请大家自行建立 C/C++ 项目,最好是使用 VS2019 来建立项目。

如果还不会用 VS2019 来建立 C/C++ 项目的话,请参考如下链接所示的文章。

Windows编程:用 VS2019 编写C语言程序-CSDN博客

在本节,我需要你将第一分节中的代码块中的代码,设置为 C/C++ 项目中的 main.c 中的源代码。并自行编译生成。

三.    逐语句命令

我们点开【调试】菜单项,展开的下拉菜单里面,有【逐语句】一项。如下图所示。

图4

由图4 可知,逐过程命令的快捷键,是 F11 。

程序中的断点,由红色圆点来指示。某一代码行的左边存在着红色圆点,表示这一行存在着断点。而程序中的执行断点,由黄色小箭头来指示。

注意,这个执行断点的概念,是我自己临时起的名字。在本专栏里面,你可以这么来使用,在别的教程里面,你就不能这么用了。

逐语句指令,它是一个常用的调试命令。当程序以调试模式运行时,当程序停在某一断点的时候,我们若是执行了【逐语句】指令,则程序会执行一条语句。具体的执行情况分为两种,一种是说,黄色小箭头所在的代码行存在着函数调用,另一种情况是说,黄色小箭头所在的代码行不存在函数调用。

如果黄色小箭头,也就是执行断点所在的代码行,当此行不存在函数调用的时候,则执行【逐语句】指令会使得程序执行完黄色小箭头所在的代码行,并使得黄色小箭头停在下一行。在这种情况下,【逐语句】指令与【逐过程】指令的效果是一致的。

如果黄色小箭头,也就是执行断点所在的代码行,当此行存在着函数调用的时候,则程序会进入被调用函数,执行断点会停在被调用函数之中。这种情况,它是【逐语句】和【逐过程】指令的区别。对于【逐语句】指令,程序会跳转到被调用函数中,并且黄色小箭头会停在被调用函数里面。而【逐过程】指令则是说,程序会将黄色小箭头所在的代码行给执行完,并停在下一个代码行。

也就是说,当黄色小箭头所在的代码行存在着函数调用的时候,【逐过程】指令会将此行的所有的被调用函数都给执行完,并停在下一个代码行上面。而【逐语句】指令则是会进入被调用函数,并且黄色小箭头会停在被调用函数里面。

以上,就是对逐语句指令的讲解。有些抽象,可能,你还不理解。

接下来,我们通过具体的操作,来了解【逐语句】指令。

四.    上机操作

执行【逐语句】调试指令,可以通过两种方法。第一种,是依次点击【调试】,【逐语句】菜单命令。第二种方法,是按下键盘上的功能键 F11 。

第二种方法会管用,是因为,【逐语句】指令的快捷键,便是 F11 。

我们来开始上机操作。

首先呢,请大家找到代码编辑区域的如下位置。

图5

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

图6

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

图7
图8

如图8 所示,黄色小箭头停在了12行的位置。

我们依次点击【调试】,【逐语句】菜单命令,以执行一次【逐语句】命令,结果如下。

图9

如图9 所示,黄色小箭头停在了13行的位置。

在图8 里面,黄色小箭头停在了12行,表示说,12行尚未执行。而在图9 里面,黄色小箭头停在了13行,这表示说13行尚未执行,而12行代码已经是执行完了。

在这里,当黄色小箭头停在12行的时候,我们执行了一次【逐语句】指令,它的效果是让程序执行完一行的代码,并停在下一行,13行。这是因为,12行并不存在着函数调用。

当黄色小箭头所在的代码行不存在函数调用的时候,我们执行一次【逐语句】命令,它的效果是执行完黄色小箭头所在的代码行,并停在下一个代码行的位置。这与【逐过程】指令是一样的。

接下来,我们按下 F11,再执行一次【逐过程】命令。结果如下图所示。

图10

在执行本次的【逐语句】指令之前,黄色小箭头停在13行,这表示说,13行尚未执行。而在执行了【逐语句】指令之后,黄色小箭头停在了14行的位置,这表示说,14行尚未执行,而13行已执行完毕。

也就是说,本次的【逐语句】指令,它的执行效果是,让黄色小箭头所在行的代码执行完毕,并且停在下一行。之所以会执行完一行,这是因为在执行【逐语句】指令之前,黄色小箭头所在的第13行代码并不存在着函数调用。

到了这里,我们应该是可以理解【逐语句】指令的部分功能了。

上面的两次使用【逐语句】指令的场合,都是说,执行断点所在行的代码,不存在着函数调用。

我们再按一次 F11,使得执行断点,也就是让黄色小箭头停在15 行。如下图所示。

图11

这回呢,执行断点停在15行了。15行,存在着一个函数调用,调用的函数为【calcu01】。

按照我们之前的讲解,执行一次【逐语句】指令,程序应该进入被调用函数,并且黄色小箭头应该停在被调用函数【calcu01】里面。

那么,我们按一次 F11,看看结果如何。

图12

如图12 所示,黄色小箭头停在了 calcu01() 函数里面。

也就是,逐语句指令,确实是说,在执行断点所在行存在着函数调用的情况下,会令程序进入被调用函数,并且黄色小箭头会停在被调用函数里面。

黄色小箭头代表着执行断点,也就是说,【逐语句】指令,会在执行断点所在行存在着函数调用的情况下,令程序进入被调用函数,并且停在被调用函数里面,等候程序员的后续的调试指令。

我们再按一次 F11,结果如下。

图13

黄色小箭头不是应该停在28行吗?为啥会停在29行呢?

这是因为,28行只是一个变量声明,不存在要执行的语句。停在29行,这依然是逐语句的执行方式。

在使用【逐语句】或者【逐过程】指令的时候,程序是如何来跳过开头的变量声明部分的,我也不太明白。大家自己多去尝试吧。对变量声明部分的跳过,并不影响【逐语句】或者【逐过程】的执行逻辑。

接下来,我们再按一次 F11,结果如下。

图14

这一次呢,程序执行完了第 29 行,停在了 30 行。

到了这里,我想,【逐语句】指令的逻辑,大家应该是能够大致了解了吧?

那么,本节,我打算到此结束。

首先呢,我们我们依次点击【调试】,【停止调试】菜单命令,过程如下图所示。

图15
图16
图17

接下来,请大家关闭图17所示的黑窗口。

然后呢,依次点击【调试】,【删除所有断点】菜单命令,以删除程序中仅有的第12行的断点,过程如下图所示。

图18
图19

在图19所示的对话框中,我们点击【是】,然后呢,结果如下图所示。

图20

如图20 所示,第12 行的断点被删除了。

结束语

到了这里,逐过程和逐语句,这两个常用的调试指令,我就都讲完了。不过呢,其实我讲得还不是特别地详细。因为,像是 return 语句,我就没有领着大家去调试。那个,我觉得实在是有点烦人。所以呢,这种烦人的东西,还是请大家自己来试着执行调试指令吧。

本节结束。

专栏导航

本节文章分别属于《Win32 学习笔记》和《MFC 学习笔记》两个专栏,故划分为两个专栏导航。读者可以自行选择前往哪个专栏。

(一)WIn32 专栏导航

上一篇:编程技能:调试03,逐过程命令与退出调试

回到目录

下一篇:无

(二)MFC 专栏导航

上一篇:编程技能:调试03,逐过程命令与退出调试

回到目录

下一篇:无

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com