C—初阶调试

news2025/4/8 11:36:12

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

什么是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.coloradmin.cn/o/2257618.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vs打开unity项目 新建文件后无法自动补全

问题 第一次双击c#文件自动打开vs编辑器的时候能自动补全,再一次在unity中新建c#文件后双击打开发现vs不能自动补全了。每次都要重新打开vs编辑器才能自动补全,导致效率很低,后面发现是没有安装扩展,注意扩展和工具的区别。 解决…

中间件--MongoDB部署及初始化js脚本(docker部署,docker-entrypoint-initdb.d,数据迁移,自动化部署)

一、概述 MongoDB是一种常见的Nosql数据库(非关系型数据库),以文档(Document)的形式存储数据。是非关系型数据库中最像关系型数据库的一种。本篇主要介绍下部署和数据迁移。 在 MongoDB 官方镜像部署介绍中&#xff…

基于大模型的 AI Agent 技术框架全解析

一、AI Agent 与大语言模型:智能时代的双璧合辉 (一)AI Agent:智能化浪潮的引领者 在科技迅猛发展的当下,AI Agent 作为一种能够自主感知环境、决策并行动的智能系统,正引领着智能化的新潮流。与传统智能系…

5.ABAP结构体和内表

总学习目录请点击下面连接 SAP ABAP开发从0到入职,冷冬备战-CSDN博客 目录 5.1.结构化数据对象 定义 如何引用结构化的数据对象 拷贝 实战练习 创建 拷贝 调试代码 5.2.内表 行类型 键 表种类 存取类型 表类型 如何在本地定义表类型 内表三种可能的…

3D 生成重建030-SV3D合成环绕视频以生成3D

3D 生成重建030-SV3D合成环绕视频以生成3D 文章目录 0 论文工作1 论文方法2 实验结果 0 论文工作 论文提出了Stable Video 3D (SV3D)——一个用于生成围绕三维物体的高分辨率图像到多视角视频的潜在视频扩散模型。最近关于三维生成的文献提出了将二维生成模型应用于新视图合成…

中介者模式的理解和实践

一、中介者模式概述 中介者模式(Mediator Pattern),也称为调解者模式或调停者模式,是一种行为设计模式。它的核心思想是通过引入一个中介者对象来封装一系列对象之间的交互,使得这些对象不必直接相互作用,从…

【蓝桥杯每日一题】砍竹子

砍竹子 2024-12-7 蓝桥杯每日一题 砍竹子 STL 贪心 题目大意 这天, 小明在砍竹子, 他面前有 nn 棵竹子排成一排, 一开始第 ii 棵竹子的 高度为 h i h_i hi​. 他觉得一棵一棵砍太慢了, 决定使用魔法来砍竹子。魔法可以对连续的一 段相同高度的竹子使用, 假设这一段竹子的高度为…

泷羽sec-burpsuite(5)app渗透测试(上) 学习笔记

声明! 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&a…

从一个Bug谈前端响应拦截器的应用

一、问题场景 今天在开发商品管理系统时,遇到了一个有趣的问题:当添加重复的商品编号时,页面同时弹出了两条 "商品编号已存在" 错误提示: 这个问题暴露了前端错误处理机制的混乱,让我们从这个问题出发&…

量子变分算法---损失函数

引子 关于损失函数,我们知道在强化学习中,会有一个函数,用来表示模型每一次行为的分数,通过最大化得分,建立一个正反馈机制,若模型为最优则加分最多,若决策不佳则加很少分或者扣分。而在神经网络…

车间的图纸在传输过程的安全怎么保障?

车间的图纸在传输过程的安全保障,要从很多方面出发分析,本文从以下几点为大家列出几个,看看有没有你想知道的呢~ 1、采用先进的图纸加密软件 采用先进的加密算法对图纸进行加密处理,确保图纸文件在存储、传输和使用过程中的安全性…

MQTT消息服务器mosquitto介绍及说明

Mosquitto是一个开源的消息代理软件,支持MQTT协议(消息队列遥测传输协议)。MQTT是一种轻量级的发布/订阅消息传输协议,专为低带宽、不可靠网络环境下的物联网设备通信而设计。以下是关于Mosquitto服务器的一些介绍和说明&#xff…

想在iPad上远程操作安卓手机的APP,怎样实现iPad远程控制安卓?

学生党或互联网行业的打工人,人手连三台电子设备也很常见,手机、平板还有笔记本电脑一大堆,如果出门要全带上,背包压力也变大。 有没有想过用远程控制功能,让iPad远程控制安卓手机?这样做,出门就…

VBA高级应用30例应用在Excel中的ListObject对象:向表中添加注释

《VBA高级应用30例》(版权10178985),是我推出的第十套教程,教程是专门针对高级学员在学习VBA过程中提高路途上的案例展开,这套教程案例与理论结合,紧贴“实战”,并做“战术总结”,以…

Spring源码分析之Bean的实例化(createBeanInstance())

前言: 通过Spring源码分析之Bean的创建过程(createBean)-CSDN博客我们可以知道如果没有动态代理以及循环依赖的前提之下的话那么一个普通的单例Bean的创建后就是实例化,属性填充,初始化这三个步骤那么这篇文章的话我们就先说一下实例化也就是doCreateBean方法里面的createBeanI…

一次“okhttp访问间隔60秒,提示unexpected end of stream“的问题排查过程

一、现象 okhttp调用某个服务,如果第二次访问间隔上一次访问时间超过60s,返回错误:"unexpected end of stream"。 二、最终定位原因: 空闲连接如果超过60秒,服务端会主动关闭连接。此时客户端恰巧访问了这…

蓝桥杯准备训练(lesson5 ,c++)

单目操作符与第 2 章 C/C输⼊输出(上) 8. 单⽬操作符8.1 和--8.1.1 前置 和 后置8.1.2 前置-- 和 后置-- 8.2 和 - 第 2 章 C/C输⼊输出(上)1. getchar 和 putchar1.1 getchar()1.2 putchar() 2. scanf 和 printf2.1 printf2.1.1…

Linux系统挂载exfat格式U盘教程,触觉智能RK3562开发板演示

本文介绍Linux系统(Ubuntu/Debian通用)挂载exfat格式U盘的方法,触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU,可应用于物联网网关、平板电脑、智能家居、教…

LeetCode 0935.骑士拨号器:动态规划(DP)

【LetMeFly】935.骑士拨号器:动态规划(DP) 力扣题目链接:https://leetcode.cn/problems/knight-dialer/ 象棋骑士有一个独特的移动方式,它可以垂直移动两个方格,水平移动一个方格,或者水平移动两个方格,垂…

No.4 笔记 探索网络安全:揭开Web世界的隐秘防线

在这个数字时代,网络安全无处不在。了解Web安全的基本知识,不仅能保护我们自己,也能帮助我们在技术上更进一步。让我们一起深入探索Web安全的世界,掌握那些必备的安全知识! 1. 客户端与WEB应用安全 前端漏洞&#xff1…