鹏哥C语言复习——调试

目录

什么是调试?

Debug和Release:

调试方法:

环境准备:

调试快捷键介绍:

调试快捷键注意事项:

监视与内存查看:

数组元素的监视:

编译常见错误归类:

编译型错误:

链接型错误:

运行时错误:


什么是调试?

当我们发现程序中存在问题的时候,那下一步就是找到问题并修复问题。

这个找问题的过程叫做调试,英文叫debug(消灭bug)的意思。

Debug和Release:

Debug版本通常称为调试版本,它包含调试信息,并且不做任何优化,便于程序员调试程序;同时这样编译产生的是debug版本的可执行程序,其中包含调试信息,是可以直接进行调试的。

Release版本通常称为发布版本,它往往是进行了各种优化,使得小程序在代码大小和运行速度上都是最优的,以便用户很好地使用;它编译产生的是release版本的可执行程序,这个版本是给用户使用的,无需包含调试信息等。

所以,release版本小,debug版本大

7687d1f936744fc891bac3b1b9bc3113.jpg

调试方法:

环境准备:

首先是环境的准备,需要一个支持调试的开发环境,笔者此处用的是vs2022,应该把vs上设置为Debug,如图

24ff805f24b34f9f84c07bdf290d7dcc.jpg

调试快捷键介绍:

0218a80d8de84189a00e74ce01b76ed2.jpg

如果是无断点的调试,直接按F10即可从主函数开始调试

调试快捷键注意事项:

580891f1f4834aa69e9db005a878e03f.jpg

假设我们给了两个断点,且两个断点都位于循环语句,那么此时我们使用F5能从当前断点处跳到下一断点处吗?

答案是不能,因为断点位于循环语句,因此下一次遇见断点依旧是该断点本身(循环所致),并不能一次性跳出循环

注意:笔记本电脑上这些快捷键都需要配合Fn来使用(例如Fn + F5,效果与F5一样),当然也可以跟着CSDN教程,关闭功能键模式

断点的其他细节:

右击断点,可以看到一个条件标签,点击即可产生条件断点

57ccca6f41ae431ca04ce62365b275fd.jpg

条件断点的功能:可以在点击条件标签后给该断点上一个条件(就比如此处给了一个条件 i == 5),那么按了F5之后就会直接跳到 i == 5 的这一步(循环语句中的 i == 0,1,2,3,4 就直接跳过了),如下图所示

d01aeb1a7da445a68f3a0931892fe825.jpg

监视与内存查看:

请注意,无论是监视还是内存查看都需要有一个前提:程序开始调试。在程序没有调试的环境下,调试一栏是没有这两个标签的!

1.监视:监视窗口即是在搜索一栏搜索需要调试的标识符、数组名等等;除了一般性的监视窗口(需要手动输入需要查看的名称),vs2022还自带了自动窗口(无数手动输入,某一个数组或变量经过运算后自动出现在窗口页面)以及局部变量窗口(只有局部变量的窗口,但这边是全部局部变量)。如下所示

a8d6cc9778a6463299c4e703b544cb31.jpg

 f3b790e0843e48c99df75dee9e58c1fd.jpg

2.内存查看:内存查看依旧属于一个窗口,因此也是在 调试-窗口 里查看。

c5039c3054b04bf3b69fe64afffa5971.jpg

这边我们需要注意的是内存查看窗口,它表示的究竟是什么内容。

在最左边的地址,每个地址单元存放一字节的内容,所以我们也就不难发现下图是以每行18字节显示(自动)

中间部分是内存中的值,内存中本来是2进制的,但由于2进制表示太长,所以为了方便改成了16进制,1个字节的2进制转换成16进制就是两位数字

最右边的是内存的简单解析,但由于这些解析我们压根就看不懂(怪不得叫简单解析),所以直接忽略即可

4c07effbb776488081bddbf4bddb2813.jpg

但这时候我们能不能让每行显示的字节数少一点,让内存查看更加清晰明了呢,点击列那一栏,就可以选一个数字,这个数字(假设为n)即为每行显示n个字节内容

8540160de9164f8fa484298cf7ba82e6.jpg

数组元素的监视:

  1. 数组传参以后的监视:传参以后监视窗口里只会显示数组的首地址元素。并且在未进入函数以前,该元素是一个随机值;进入函数以后,才会将它变成数组的现存元素。
  2. 二维数组的监视:二维数组如果没有特殊的声明,监视只会显示一行的内容;作为实参传参以后,依然只能显示一行的内容,随机值的规则不变。
  3. 上述问题的解决:想要看全数组内容,可以通过 数组名,数字 的方式。这边的数字对于情况1即为监视到数组的第几个元素,对情况2即为监视到数组的第几行元素。(如下两图所示)

9b864558cabd43b4a5d5118385d7865c.jpg

情况1

e4fc6e425b9b419b850cac8d521ce563.jpg

情况2

同时,上述情况并不代表必须要让数组所有内容都在监视窗口可视。可以按照我们的需求,对于这个数字有改变。比如下图,我们只展示了一个二维数组的2行元素,但它有3行元素。

4a383ede00cc4f4bbd9072e045d61e1f.jpg

编译常见错误归类:
 

编译型错误:

编译型错误一般性都是语法错误。这类错误一般看错误信息就能找到一些蛛丝马迹的。双击错误信息也能初步的跳转到代码错误的地方或附近。编译错误,随着语言的掌握熟练,会越来越少,也容易解决。

76d923a0336542b69e7b5eb6a052aa0d.jpg

链接型错误:

看错误提示信息,主要在代码中找到错误信息中的标识符,然后定位问题所在。一般是因为

  • 标识符名不存在
  • 拼写错误
  • 头文件没包含
  • 引用的库不存在

3c4ab2e323ba4a36a58370d473632dfb.jpg

运行时错误:

没有语法错误,没有链接错误,程序运行起来了,但结果和想要的不符。

这种错误是最麻烦的,需要通过调试来发现问题,解决问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/334557.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

迁移基于MicroBlaze处理器的设计

迁移基于MicroBlaze处理器的设计 生成系统基础设施(MicroBlaze、AXI_Interconnect, Clk_Wiz、Proc_Sys_Reset) 生成系统基础设施(MicroBlaze、AXI_Interconnect、Clk_Wiz和 Proc_Sys_Reset): 1.使用所需的板…

Java 文件操作和输入输出流

在 Java 编程中,文件操作和输入输出流是非常常见和重要的任务,它们允许你读取和写入文件、处理数据流等。 文件操作概述 文件操作是指对文件进行创建、读取、写入、删除等操作的过程。在 Java 中,文件操作通常涉及到使用文件对象、输入输出…

区块链系统开发测试----链码部署开发、系统开发验证

一.检查配置环境 检查虚拟机环境,确保有正在运行的Hyperledger Fabric区块链,并且其中chaincode_basic、credit_chaincode链码可以正常调用 查看chaincode_basic、credit_chaincode链码调用 二.开发征信链码代码 基于现有征信链码,开发征信…

SpringBoot基础篇

1:parent 目的:减少依赖配置 开发SpringBoot程序要继承spring-boot-starter-parentspring-boot-starter-parent中定义了若干个依赖管理继承parent模块可以避免多个依赖使用相同技术出现依赖版本冲突继承parent的形式也可以采用引入依赖的i形式实现效果…

【Python编程实战】基于Python语言实现学生信息管理系统

🎩 欢迎来到技术探索的奇幻世界👨‍💻 📜 个人主页:一伦明悦-CSDN博客 ✍🏻 作者简介: C软件开发、Python机器学习爱好者 🗣️ 互动与支持:💬评论 &…

SpringBoot整合RabbitMQ的快速使用教程

目录 一、引入依赖 二、配置rabbitmq的连接信息等 1、生产者配置 2、消费者配置 三、设置消息转换器 四、生产者代码示例 1、配置交换机和队列信息 2、生产消息代码 五、消费者代码示例 1、消费层代码 2、业务层代码 在分布式系统中,消息队列是一种重要…

[SWPUCTF 2022 新生赛]奇妙的MD5... ...

目录 [SWPUCTF 2022 新生赛]奇妙的MD5 [GDOUCTF 2023]受不了一点 [LitCTF 2023]作业管理系统 注入点一:文件上传 注入点二:创建文件直接写一句话木马 注入点三:获取数据库备份文件 [LitCTF 2023]1zjs [SWPUCTF 2022 新生赛]奇妙的MD5 …

修改了vue3 <script setup>留言板

Лунная ночь <template><button class"edit_view_checkbox"><input type"checkbox" v-model"editshowInput" value"编辑" /></button><div class"editshowInput" v-if"editshowI…

Oracle实践|内置函数之日期与时间函数

&#x1f4eb; 作者简介&#xff1a;「六月暴雪飞梨花」&#xff0c;专注于研究Java&#xff0c;就职于科技型公司后端工程师 &#x1f3c6; 近期荣誉&#xff1a;华为云云享专家、阿里云专家博主、腾讯云优秀创作者、ACDU成员 &#x1f525; 三连支持&#xff1a;欢迎 ❤️关注…

《中国科技投资》是什么级别的期刊?是正规期刊吗?能评职称吗?

问题解答&#xff1a; 问&#xff1a;《中国科技投资》期刊什么级别&#xff1f; 答&#xff1a;国家级 问&#xff1a;《中国科技投资》期刊是核心期刊吗? 答&#xff1a;不是&#xff0c;是万方维普收录的正规期刊。 主管单位&#xff1a;中国信息协会 主办单位&#…

3.1 掌握RDD的创建

在Apache Spark中&#xff0c;RDD&#xff08;Resilient Distributed Dataset&#xff09;是一个基本的、不可变的、分布式的和可分区的数据集。它能够自动进行容错处理&#xff0c;并支持在大规模集群上的并行操作。RDD之间存在依赖关系&#xff0c;可以实现管道化&#xff0c…

【全开源】民宿酒店预订管理系统(ThinkPHP+uniapp+uView)

民宿酒店预订管理系统 特色功能&#xff1a; 客户管理&#xff1a;该功能可以帮助民宿管理者更加有效地管理客户信息&#xff0c;包括客户的姓名、电话、地址、身份证号码等&#xff0c;并可以在客户的订单中了解客户的消费情况&#xff0c;从而更好地满足客户的需求&#xff…

②单细胞学习-组间及样本细胞比例分析

目录 数据读入 每个样本各细胞比例 两个组间细胞比例 亚组间细胞比例差异分析&#xff08;循环&#xff09; 单个细胞类型亚新间比例差异 ①单细胞学习-数据读取、降维和分群-CSDN博客 比较各个样本间的各类细胞比例或者亚组之间的细胞比例差异 ①数据读入 #各样本细胞…

【介绍下如何在SQL中添加数据】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

rust语言初识

程序设计实践课上水一篇ing 来源&#xff1a;rust基础入门-1.初识rust-酷程网 (kucoding.com) rust作为一名新兴语言&#xff0c;与go又有些许不同&#xff0c;因为它的目标是对标系统级开发&#xff0c;也就是C、C这两位在编程界的位置。比如我们最常用的windows系统&#x…

SpringBoot实现邮箱验证码

自行创建一个SpringBoot项目 导入SpringBoot所需要的邮箱验证码的包 <!--邮件发送--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId><version>2.6.1</version>…

【JAVA |图书管理系统】JAVA实现图书管理系(附完整代码)

✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天开心哦&#xff01;✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; &#x1f388;丠丠64-CSDN博客&#x1f388; ✨✨ 帅哥美女们&#xff0c;我们共同加油&#xff01;一起…

Java入门基础学习笔记47——ArrayList

什么是集合呢&#xff1f; 集合是一种容器&#xff0c;用来装数据的&#xff0c;类似数组。 有数组&#xff0c;为什么还要学习集合呢&#xff1f; 数组定义完成并启动后&#xff0c;长度就固定了。 而集合是大小可变&#xff0c;开发中用的最多的。 集合的特点&#xff1a;大…

改进rust代码的35种具体方法-类型(十九)-避免使用反射

上一篇文章 从其他语言来到Rust的程序员通常习惯于将反思作为工具箱中的工具。他们可能会浪费很多时间试图在Rust中实现基于反射的设计&#xff0c;却发现他们所尝试的事情只能做得不好&#xff0c;如果有的话。这个项目希望通过描述Rust在反思方面做什么和不做什么&#xff0c…

【chagpt】广泛使用API之前:考虑成本和数据隐私

文章目录 一. 定价和标记限制二. 安全和隐私 在广泛使用API之前&#xff0c;应该考虑两个重要因素&#xff1a;成本和数据隐私。 一. 定价和标记限制 OpenAI在Pricing页面上列出了模型的定价。请注意&#xff0c;OpenAI不一定及时更新该页面上的定价信息&#xff0c;因此实际…