编程技能:调试05,自动窗口与局部变量选项卡

专栏导航

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

(一)WIn32 专栏导航

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

回到目录

下一篇:编程技能:调试06,监视选项卡

(二)MFC 专栏导航

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

回到目录

下一篇:编程技能:调试06,监视选项卡

本节前言

在前面的几节里,我讲了一点调试指令。本节呢,我来讲一下自动窗口和局部窗口。

在学习本节之前,你需要已掌握前面的几节知识,需要你已经掌握了【逐过程】,【逐语句】,【切换断点】,【开始调试】等等的调试指令。如果,你还不知道这些个调试指令,那么,你可以参考下面的几个文章链接。

编程技能:调试02,设置断点与删除断点-CSDN博客

编程技能:调试03,逐过程命令与退出调试-CSDN博客

编程技能:调试04,逐语句命令-CSDN博客

在确保你已经了解了前面几节所讲的调试指令的基本概念以后,你可以接着往下学习。

一.    本节代码

#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 中的源代码。并自行编译生成。

三.    了解变量的变动情况

在之前的几个章节里,我讲解了一些调试指令。不过,在这些个调试治指令里面,我在讲解的时候,其中的一个重点,是黄色小箭头的位置,也就是程序中的当前断点在什么位置。无论是逐过程指令,还是逐语句指令,我在讲解的时候,都是结合着黄色小箭头来讲解它们的功能的。

然而,单纯讲解调试指令与黄色小箭头的关系,其实还不是调试的重点。

调试的一大重点,是让我们了解,在程序执行的不同阶段中,不同的变量值的演化情况。

一般地,在调试中,我们并不需要关注所有的变量的演化情况,我们只需要关注重点变量就可以了。

如何来了解变量的值呢?

我们可以通过编程的方法,在某某代码行上面,插入 printf() 函数,将某某变量的值给打印出来。

这个是可以的。打印某一个变量的值,只需要我们根据自己的需要插入不同的 printf() 函数就可以了。

可是,当我们的想法出现了变动,需要了解其他的变量的值的时候,我们又需要重新改写程序代码,还需要重新编译。然后呢,重新运行程序,来通过屏幕的打印信息,才能够知道这个新的关注变量的值的变化情况。

甲时刻,我们想了解 a 变量。乙时刻,我们又想要了解 b 变量。丙时刻,我们又想要了解 c 变量的情况。每当我们想要了解一个的关注变量的情况时,我们就都需要重新改写代码和编译,还需要重新运行程序,太麻烦了。

可不可以说,当我们想要了解不同的变量的值的时候,我们随时可以获得这个变量的情况,而又不需要重新改写代码和编译运行呢?可以的。调试的好处,正是给我们提供了这个便利。

通过调试,我们可以在不修改程序的情况下,随时了解各个变量的演化情况。

我们可以通过几个窗口,来了解程序中的变量的变动情况,它们分别是自动窗口,局部变量窗口,监视窗口。

本节,我们要了解的是自动窗口与局部变量窗口。

四.    自动窗口和局部变量窗口

首先呢,我们在代码的第12行的某一个位置,点击一下鼠标左键,然后按下功能键 F9,以设置一个断点在第 12 行。

然后呢,我们依次点击【调试】,【开始调试】菜单命令,以启动调试。过程如下。

图4
图5
图6

到了这里,我们就启动调试了。

调试启动了以后, VS2019 的界面会发生一点变化。

大家试着来找一找下图所示的区域,

图7

在图7的下方,有三个选项卡,分别是【自动窗口】,【局部变量】和【监视1】。目前,在我这里,【局部变量】和【监视1】是蓝色显示,而【自动窗口】选项卡是白色高亮显示。然后呢,在图7上的橙色区域,显示的字样,为【自动窗口】。

这个橙色横条,它所显示的字样,就是我们所选择的选项卡的名称。我们点选了【自动窗口】,则橙色横条区域的左边,显示的字样就会是【自动窗口】。

如果我们点选的是【局部变量】,则橙色横条区域的左边,显示的字样就会是【局部变量】。

(一)调试窗口的字段

我们来看一下图7之中,橙色横条以下,三大选项卡以上的区域,也就是下图的红色框线所示的区域。

图8

在图8 的红色框线所示区域,它是一个表格。表格里面包含了三个字段,分别是名称,值和类型。

表格里面的不同的行,它列出了当前选项卡里面所关注的变量的列表。

名称一栏,表示的是关注的变量的名字。值一栏,表示的是这一行变量的当前值。类型一栏,表示的是这一行变量的数据类型。

(二)自动窗口选项卡的功能

自动窗口里面,会显示与黄色小箭头所在的代码行相关的局部变量和全局变量的情况。

注意哦,自动窗口里面,可以既关注局部变量,又关注全局变量。

在自动窗口选项卡被激活的时候,调试变量列表里面,所显示的变量名,会动态调整。有时显示某个变量,有时并不显示。

(三)局部变量选项卡的功能

激活了【局部变量】选项卡,则调试变量表格区域,会显示与黄色小箭头所在的代码行相关的局部变量的情况。

注意哦,在【局部变量】选项卡里面,只关心局部变量,而并不关注全局变量。

在局部变量选项卡被激活的时候,调试变量列表里面,所显示的项目,主要是黄色小箭头所属的函数的全部局部变量。这些局部变量项目是不增不减的,不会动态调整,始终都是黄色小箭头所属函数的全部局部变量。

五.    调试练习

具体的调试指令,我们在之前的章节已经讲解过,本节,我只当你已经掌握了前面几节的内容。本节的调试练习,目的在于让你了解【自动窗口】与【局部变量】选项卡的功能。

我们来看一看调试变量表格的部分,如下图所示。

图9

此时,黄色小箭头位于第12行,而此时,主函数里面的各个变量,尚未被赋值。

此时,几个变量的值,如图9 所示,都是一些个不规则的值。为啥是这个值,我们不用管,只需要知道它是一个不规则的值就可以了。

我们按一下 F10,执行一次【逐过程】指令,结果如下。

图10

如图10 所示,第12行执行完毕,程序停在了黄色小箭头所指示的第13行位置。

第12行,是用于给变量 a 赋值,赋值为 10 。

而在图10里面,变量 a 的确是变为了 10 。由于是刚刚变为 10,所以,a 的值用红色来标识。而其余的变量,用黑色来书写。

再按一次 F10,结果如下图所示。

图11

如图11所示,程序停在了14行,13行执行完毕。

第13行的代码是给变量 b 赋值,赋值为 20 。

图11里面,变量 b 的确是变为了 20 。由于是刚刚被赋值,所以,变量b 用红色来书写。

变量a 并非刚刚被赋值,所以为黑色显示。

大家还可以看到,在图10 里面,自动窗口中显示的变量,有 a,b 和 res 。而到了图 11 里面,则是只显示了 a 和 b 。

再按一次 F10,结果如下图所示。

图12

如图12 所示,程序停在了15行,14行刚刚执行完。

第 14 行代码,是修改变量 a 的值。由于a刚刚被修改,所以,在图12 里面,变量 a 的值为红色显示,变为了 11 。

变量b 的值,由于在刚刚的调试指令所执行的代码里面,并未被修改,所以,仍然是黑色显示。res01 同理。

我们再按下两次,结果分别如下。

图13
图14
图15

图13和图14,应该是不难分析的。大家自行分析吧。

图15,它显示了 calcu03() 的返回值。然而,res03 并未显示出来。如何将 res03 显示出来呢?

我们来看一下,图15所示界面的右侧,有一个滚动条,我们将滚动条的滑块往下拉,就可以看到看到 res03 了,结果如下图所示。

图16

在图15 和图 16 里面,res03 的值和 calcu03() 的返回值相同,都是 65 。这符合刚刚执行完毕的第17 行代码的功能。第17行代码为:【res03 = calcu03(a, b);】。

关于自动窗口和局部变量选项卡,我就讲到这里了。

接下来,请大家依次点选【调试】,【停止调试】,以退出调试状态。

然后呢,请大家依次点选【调试】,【删除所有断点】,并在弹出的小对话框中选择【是】选项,以清理程序中的断点,也就是仅有的第12行的断点。

最后,关闭控制台黑窗口。

结束语

本节的内容,我认为不难。

然而,我在讲解的时候,还是会觉得有些费劲儿。

专栏导航

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

(一)WIn32 专栏导航

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

回到目录

下一篇:编程技能:调试06,监视选项卡

(二)MFC 专栏导航

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

回到目录

下一篇:编程技能:调试06,监视选项卡

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值