C—初阶调试

对你有帮助的话能否一键三连啊!祝每个人心想事成! 

什么是Bug?

首先我们先了解一下日常口语中的“Bug”是什么

Bug可以理解为计算机程序错误,编程时的漏洞

调试及重要性

顾名思义,调试就是通过工具找出bug存在,找出代码里面的错误,否则出现漏洞,造成程序崩溃甚至经济损失

调试基本步骤

1:通过工具找出错误所在

2:通过各种方式对bug定位

3:确定产生bug的原因

4:提出解决方案

5:修改漏洞(bug),重新测试是否修改成功

Debug版本和Release版本介绍

在编译器中我们可以看见

Debug是调试版本,通常是程序员编辑代码时用的版本

Release是发布版本,用于优化代码性能,通常为发布版本,不可以调试

这两个版本都可以运行,不同的是性能区别,你可以理解为Debug是包装工厂的,然后再把它转化为Release版本发布给用户

同时在编写的代码文件位置,也有这两个文件

例如:我有一个动态爱心代码,那么在文件管理中我们可以看到这两个版本

Windows调试环境

我们先来认识几个快捷键,通常在调试上使用

 

我们可以看到这几个快捷键

F5,F11,F10 ,    B(新建断点)

我们一个个介绍

首先(一般我们直接按  F10  或者  F11  进入调试,F5很少用)

F5调试按钮,点开有调试效果,点它后会开始调试,(调试可以理解为检测代码),在有断点的地方停下

F10按F10后同样有调试效果,所以一般我们之间按F10或者F11(重要的是区别),就不再单独按调试(F5),在有断点的地方停下来

F11按F11同样有调试效果,但是同F10不同的是,按F11可以快速进入一个函数内部,如果你想观察一个函数的运行,可以点击F11,点F10就跳过去直接得出函数的返回值了,在有断点的地方停下来

B(放置断点):新建断点,让按F5或者F10或者F11后在这个断点的地方停下来,通常在需要观察的入口放一个断点,不然调试按钮后,程序就直接运行完了 

注意:如果要跨函数(一般我们写工程需要创建多个源文件),同样直接打个断点就行了,记得按F11进入函数啊!例如:

如何放置一个断点?

在需要放置断点的地方鼠标点击开对应最左边的灰色区域

 

下面我们看调试后的环境

例如:先进入调试环境,再打开窗口,就可以看到下面这幅图的效果了

 

我们再介绍几个经常用的功能 (如果你的F键功能区出现了多个按键效果,比如:加减音量,屏幕亮度,可以按      Fn+Esc     关闭其它功能区,再按一次就重新打开了,这样可以保证进入调试时没有其它功能效果干扰

首先第一个:监视

打开监视,可以看到下面这幅图最右边有四个监视口,大家随便点一个都行,这里没区别

 

点监视口后我们看到下面这幅图,输入你要监视的变量,就是“添加要监视的项”(比如printf, i,  数组名:Arr) ,输入好变量后,我们再按F11或者F10,一步步进行语句执行观察你输入的变量变化(注意,调试后语句会在之前说的那个断点停下来,所以一定要创建断点)

注意:输入的变量值会随着按F11或者F10逐渐发生变化

其次第二个,内存变化(地址) 

跟监视前面步骤差不多一样,我们直接选择四个内存中的一个(都可以选!看哪个顺眼)

 

 然后我们输入要观察的地址,比如“  &a  ”"  数组名:Arr(直接输入Arr,我这里是告诉你它是数组名)  ",就可以观察观察目标地址变化,或者你要查找变量的地址,直接输入就行了哦

注:最右边的那个‘’ 就是控制显示的列数,可以自己体验一下

我们经常用到是这几个按钮,在初阶我们掌握这几个就行了,只要在发现程序错误时,我们可以使用以下完整顺序查找错误:

 1:按  F10  或者  F11  或者  F5  快速进入调试

2:打开监视输入变量,或者想查看内存变化就打开  内存(M)

3:再按  F10  或者  F11  一个一个语句进行,观察输入变量的值的变化,查找错误地方

4:知道哪里错了后,去修改就行了

注意:调试查找Bug是每个程序员必须掌握的哦

我们来简单体验一下:(通过调试观察下面错误代码)

首先我们先在for循环那里打一个断点,F11或者F10进入调试

在监视那里输入  i    Arr每个数组元素 

同时可以看i每加一,打印了多少次 

大概效果就是这样,通过调试可以观察 到每个变量的变化,以便及时查找原因

如何写出好的代码

什么是好的代码,有以下特点

运行正常

bug少

效率高

可读性高

维护高

注释清晰

文档齐全

我们参考一个例子(用来拷贝字符串)

我们看几个问题

1:我们在拷贝字符串的同时,也改变了原来的那份(就是被复制的模板) 

2:if判断部分虽然很清晰,但是它可以省略,更加专业化

我们参考下面这幅图,对比一下

我们介绍1个功能

assert:   头文件cassert.h在后面写表达式,当不满足时可以报警,这相对于if多了一个警报,可以避免跳过错误直接返回:return 0

相比于原版本,我们解决了以下问题

1:备份了Urr,可以在返回时不用写成“return Urr-6” ,这样相比可以让读者更懂,当然要写备份注释啊

2:一条语句判断更简洁,这需要知道部分库函数功能

3:更加简洁,更专业哈哈!

编程常见错误

最后,我们简单了解一下几类错误,了解就行啊

语法错误,通常是不注意大小写,函数写错,掉了分号

链接型错误,比如没有包含头文件,库函数名字写错

运行错误,代码不能正常运行

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

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

相关文章

Capacitor 打包后的 iOS app 无法访问 http 的内容,解决办法

Capacitor 打包后的 iOS app 无法访问 http 的内容,解决办法 上篇文章中说了如何使用 Capacitor 打包成 iOS app 的过程中遇到的问题 Capacitor在 xcode 打包 iOS 应用发布的时候出错。 在这之后,遇到了一个新问题, 就是它无法访问 http 的内…

LLaMA Factory+ModelScope实战——使用 Web UI 进行监督微调

LLaMA FactoryModelScope实战——使用 Web UI 进行监督微调 文章原始地址:https://onlyar.site/2024/01/14/NLP-LLaMA-Factory-web-tuning/ 引言 大语言模型微调一直都是一个棘手的问题,不仅因为需要大量的计算资源,而且微调的方法也很多。在…

Excel的文件导入遇到大文件时

Excel的文件导入向导如何把已导入数据排除 入起始行,选择从哪一行开始导入。 比如,前两行已经导入了,第二次导入的时候排除前两行,从第三行开始,就将导入起始行设置为3即可,且不勾选含标题行。 但遇到大文…

【C++】选择排 序算法分析与扩展

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯代码回顾💯选择排序的算法流程💯代码详解外层循环初始化最小值内层循环比较与更新元素交换 💯选择排序的特性时间复杂度空间复杂度稳定性…

顺序表(数据结构初阶)

文章目录 顺序表一:线性表1.1概念: 二:顺序表2.1概念与结构:2.2分类:2.2.1静态顺序表2.2.2动态顺序表 2.3动态顺序表的实现声明(初始化)检查空间容量尾插头插尾删头删查找指定位置之前插入数据指…

【Linux】磁盘结构和文件系统

文章目录 磁盘磁盘的物理结构LBA寻址法抽象管理分区化总结 磁盘 磁盘是计算机存储系统的核心部件之一,主要用于长期存储数据。磁盘的基本概念、物理结构和逻辑组织形式直接影响着其性能和使用效率。 下面的图片是一个磁盘: 磁盘打开之后的结构如下&…

NLP-中文分词

中文分词 1、中文分词研究背景及意义 和大部分西方语言不同,书面汉语的词语之间没有明显的空格标记,句子是以字串的形式出现。因此对中文进行处理的第一步就是进行自动分词,即将字串转变成词串。 比如“中国建筑业呈现新格局”分词后的词串…

【Golang】Go语言编程思想(六):Channel,第三节,使用Channel实现树的遍历

使用 Channel 实现树的遍历 tree 在此处简单回顾一下之前学过的二叉树遍历,首先新建一个名为 tree 的目录,并在其下对文件和子目录进行如下组织: 其中 node.go 存放的是 Node 的定义: package treeimport "fmt"type…

spring 源码分析

1 IOC 源码解析 BeanDefinition: bean的定义。里面会有beanClass、beanName、scope等属性 beanClass:通过Class.forName生成的Class 对象beanName:context.getBean(“account”),acount就是beanNamescope: 作用区分单例bean、原型bean Bea…

快速搭建SpringBoot3+Vue3+ElementPlus管理系统

快速搭建SpringBoot3Vue3管理系统 前端项目搭建(默认开发环境:node20,Jdk17)创建项目并下载依赖--执行以下命令 前端项目搭建(默认开发环境:node20,Jdk17) 创建项目并下载依赖–执行以下命令 创建项目 y…

基于Hadoop大数据音乐推荐系统的设计与实现

摘 要 各种主流的音乐平台都为用户提供了的大量的音乐,让他们时刻都能沉浸在音乐的海洋之中。然而,过多的音乐往往使用户眼花缭乱,很难发现他们真正所需要的。一套优秀的推荐系统,可以很好地解决这个问题,既能帮助用户…

IDEA遇到EasyConnect中的网络资源无法访问的问题

IDEA遇到EasyConnect中的网络资源无法访问的问题 摘要由CSDN通过智能技术生成 点击编辑IDEA的 启动配置,然后在启动器下面的新增一个请求参数然后重新启动项目, java.net.preferIPv4Stack true IDEA就能连接到EasyConnect代理的网络服务 wanshanyu_ 关…

IP研究 | 大数据洞察黄油小熊的爆火之路

一只来自泰国的小熊在国内红成了顶流。 今年,黄油小熊以烘焙店“打工人”的超萌形象迅速走红,2个月内火遍中国的社交媒体,泰国门店挤满飘洋过海求合影的中国粉丝,根据数说故事全网大数据洞察,黄油小熊2024年度的线上声…

分数求和ᅟᅠ        ‌‍‎‏

分数求和 C语言代码C 代码Java代码Python代码 💐The Begin💐点点关注,收藏不迷路💐 输入n个分数并对他们求和,并用最简形式表示。所谓最简形式是指:分子分母的最大公约数为1;若最终结果的分母为…

5G中的随机接入过程可以不用收RAR?

有朋友提到了一种不用接收RAR的RA过程,问这个是怎么回事。其实在刚刚写过的LTM cell switch篇章中就有提到,这里把所有相关的内容整理如下。 在RACH-less LTM场景,在进行LTM cell switch之前就要先知道target cell的TA信息,进而才…

Ubuntu安装grafana

需求背景:管理服务器,并在线预警,通知 需求目的: 及时获取服务器状态 技能要求: 1、ubuntu 2、grafana 3、prometheus 4、https://img-home.csdnimg.cn/images/20230724024159.png?origin_urlhttps%3A%2F%2Fimg…

vue3获取、设置元素高度

前言 在web端常见的需求场景中,会经常遇到table表格需要根据页面可视区域使高度自适应的情况。 傻喵(作者本人)昨天在尝试使用vue3实现这个需求时,看了几篇网上写的回答,都不太全面,所以干脆自己写个总结吧.(第一次写&#xff0c…

美畅物联丨观看实时视频对服务器带宽有什么要求?

​随着互联网的迅猛发展,实时视频观看已然成为人们日常生活中不可或缺的一部分。不管是视频会议、在线教育,还是在线娱乐,实时视频都起到了极为重要的作用。不过,实时视频的流畅播放对服务器的带宽有着极高的要求。本文将深入探究…

MongoDB-固定集合(Capped Collection)

在 MongoDB 中,固定集合(Capped Collection)是一种具有特殊属性的集合。固定集合具有一个固定的最大大小,并且一旦达到该大小时,最早插入的文档将会被自动删除,以便为新的文档腾出空间。固定集合的这种特性…

EasyExcel注解使用

上接《Springboot下导入导出excel》,本篇详细介绍 EasyExcel 注解使用。 1. ExcelProperty value:指定写入的列头,如果不指定则使用成员变量的名字作为列头;如果要设置复杂的头,可以为value指定多个值order&#xff…