当前位置: 首页 > 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,设置断点与删除断点

回到目录

下一篇:无

相关文章:

  • 【TeamFlow】 1 TeamFlow 去中心化生产协同系统架构
  • RUI电视桌面中文版:下载安装教程及桌面固件包获取全攻略
  • 算法01-最小生成树prim算法
  • 【论文阅读20】-CNN-Attention-BiGRU-滑坡预测
  • Android audio系统六 AudioEffect音效加载
  • Andorid 使用 libphonenumber-android 获取国际电话区号
  • 支持mingw g++14.2 的c++23 功能print的vscode tasks.json生成调试
  • PyTorch 深度学习实战(37):分布式训练(DP/DDP/Deepspeed)实战
  • LeetCode 259 题全解析:Swift 快速找出“满足条件”的三人组
  • 工业安卓主板在智能电子秤设备中的应用
  • Linux服务器配置Anaconda环境、Pytorch库(图文并茂的教程)
  • vscode、cherry studio接入高德mcp服务
  • Pytorch的常规操作
  • 【漫话机器学习系列】209.均值的标准误差(Standard Error of the Mean)
  • centos与ubuntu系统版本介绍
  • yarn的三大组件及各自作用
  • 小白从0学习网站搭建的关键事项和避坑指南(2)
  • Privacy Risks of General-Purpose Language Models
  • 京东物流基于Flink StarRocks的湖仓建设实践
  • vscode 红色波浪线问题
  • 2024年度全国十大考古新发现公布,武王墩一号墓等入选
  • 法治日报:强制统一店铺广告牌匾事件何以频发?
  • 爱奇艺要转型做微剧?龚宇:是误解,微剧是增量业务,要提高投资回报效益
  • 我国将组织实施梦舟飞船零高度逃逸、揽月着陆器综合着陆起飞验证等试验
  • 几百元的工资优势已不能吸引人才流动,江苏多地探讨“抢人”高招
  • 美国土安全部长餐厅遇窃,重要证件被盗走