当前位置: 首页 > news >正文

编程技能:调试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

在写作本节文章的时候,我还没有往代码仓库里面传入多少代码,所以,图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 可知,逐过程命令的快捷键,是 F10 。

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

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

逐过程指令,它是一个常用的调试命令。当程序以调试模式运行时,当程序停在某一断点的时候,我们若是执行了【逐过程】指令,则程序会将执行断点所在行的代码执行完毕,并停在下一行。若是执行断点所在行存在着函数调用,则【逐过程】指令会将执行断点所在行的所有的被调用函数执行完,确保将执行断点所在行的代码给执行完毕,然后停在下一行代码的位置。

假定,执行断点所在行的代码的执行,需要用户的输入,比如说C语言的 scanf() 函数,对于这种情况,那么,我们正常地输入东西就可以了。需要输入东西的时候,我们可以正常地去输入东西。除去用户输入的部分,【逐过程】指令的功能,依然是说,将执行断点所在行的代码给执行完毕,存在函数调用的话就将所有的被调用函数给执行完,程序会在下一行代码的位置上停下来。

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

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

四.    上机操作

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

第二种方法会管用,是因为,【逐过程】指令的快捷键,便是 F10 。

我们来开始上机操作。

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

图5

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

图6

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

图7
图8

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

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

图9

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

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

所以,当黄色小箭头停在12行的时候,我们执行一次【逐过程】命令,它的效果是让12行代码执行完,并停在下一行,13行。

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

图10

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

也就是说,本次的【逐过程】指令,它的执行效果是,让黄色小箭头所在行的代码执行完毕,并且停在下一行。

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

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

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

图11

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

按照我们之前的讲解,执行一次【逐过程】指令,程序应该将执行断点所在行,也就是当前的第15行代码,给执行完,而停在第16行。

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

图12

如图12 所示,果然啊,第15行代码执行完毕,并且停在了16行的位置。

接下来,我们依次点击【调试】,【逐过程】菜单命令,以执行一次【逐过程】调试指令,结果如下图所示。

图13

到了这里,我想,对于【逐过程】指令,你应该是能够理解其含义了。

我们本节的讲解任务,算是完成了,我们可以退出调试了。

如何退出调试呢?

五.    【停止调试】指令

当程序处在调试模式中,在【调试】菜单项下面,有一个子菜单项,为【停止调试】,如下图所示。

图14

这个命令,可以让我们推出调试状态。

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

图15
图16

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

结束语

本节,我们主要讲解了【逐过程】调试指令。在讲解的时候,我并没有去讲解局部变量的变化情况。这一点,以后,我准备专门来讲解。

希望大家能够学好【逐过程】调试指令。

专栏导航

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

(一)WIn32 专栏导航

上一篇:编程技能:调试02,设置断点与删除断点

回到目录

下一篇:无

(二)MFC 专栏导航

上一篇:编程技能:调试02,设置断点与删除断点

回到目录

下一篇:无

http://www.xdnf.cn/news/24409.html

相关文章:

  • 【实体转换】mapstruct详解
  • cmd查询占用端口并查杀
  • 论文阅读:2023 ICLR Safe RLHF: Safe Reinforcement Learning from Human Feedback
  • 第 4 期:DDPM中的损失函数——为什么只预测噪声?
  • 6.VTK 颜色
  • 驱动移植【简略版】
  • 从零开始学Python游戏编程30-类2
  • [Java · 初窥门径] Java 语言初识
  • C++动态分配内存知识点!
  • 锁(Mutex)、信号量(Semaphore)与条件量(Condition Variable)
  • 网络编程2
  • 第八周作业
  • alertManager部署安装、告警规则配置详解及告警消息推送
  • 工厂方法模式详解及在自动驾驶场景代码示例(c++代码实现)
  • Linux根据 PID 进行性能分析
  • 三格电子——PROFIBUS DP设备长距离传输和干扰问题解决办法
  • ffprobe 输出 HEVC 码流 Level:标准的 “错位” 与分析的 “归位”
  • javaweb-servlet-继承关系以及service方法、servlet生命周期
  • LabelImg打标工具的下载和使用——YOLO格式篇
  • open CasCade下载
  • RVOS的任务调度优化
  • OJ笔试强训_1至24天
  • `peft`(Parameter-Efficient Fine-Tuning:高效微调)是什么
  • 接口测试的原则、用例与流程
  • Git学习之路(Updating)
  • 《软件设计师》复习笔记(11.3)——需求获取、分析、定义、验证、管理
  • 欧拉系统升级openssh 9.7p1
  • 【AI】实现中文文章摘要的AI模型
  • 【失败】Gnome将默认终端设置为 Kitty
  • 如何在Linux系统中部署C++ Web应用