调试(修复错误)

news2025/1/11 10:05:53

什么是一个软件bug?

● 软件错误:计算机程序中的缺陷或问题。基本上,计算机程序的任何意外或非预期的行为都是软件缺陷。
● bug在软件开发中是完全正常的!

● 例如,现在我们存在数组,我们现在需要将这个数组颠倒排序
在这里插入图片描述

意外的结果:数组被打乱了,没有反转所以反向函数中有一个bug

这个时候我们需要调试
调试:发现、修复和防止错误的过程;

调试过程

  1. 确认(意识到有一个错误)
    a. 在开发过程中
    b. 测试软件中
    c. 生产过程中的用户报告
    d. 上下文:浏览器、用户等
  2. 找到(隔离代码中错误发生的确切位置)
    a. 开发者控制台(简单代码)
    b. 调试器(复杂代码)
  3. 修复(更正错误)
    a. 用新的正确的解决方案替换错误的解决方案
  4. 预防(防止它再次发生)
    a. 在类似的代码中搜索相同的BUG
    b. 使用测试软件编写测试

使用控制台和断点调试

举个例子,之前我们写了一个温度的例子,现在我们要将他编程开尔文温度(摄氏温度+273)

const measureKelvin = function() {
    const measurement = {
        type: "temp",
        unit: "celsius",
        value: prompt('Degrees celsius'),
    };

    const kelvin = measurement.value + 273;
    return kelvin;
}

console.log(measureKelvin());

这个代码看上去就是让用户输入一个温度,然后将温度转换为开尔文温度,就是加上273,然后返回开尔文温度,
在这里插入图片描述

1.确认错误

我们输入的温度是37度,但是他并没有返回37+273度,而是返回一个预期之外的数字,说明这串代码中肯定存在一个bug

2.寻找错误

● 首先,我们可能怀疑是不是这个value输出的时候有问题,所以我们将代码中间加一个console查看下

const measureKelvin = function () {
  const measurement = {
    type: 'temp',
    unit: 'celsius',
    value: prompt('Degrees celsius'),
  };
console.log(measurement.value);
  const kelvin = measurement.value + 273;
  return kelvin;
};

console.log(measureKelvin());

在这里插入图片描述

好像并没有什么问题,我们输入的确实是37!

● 那么接下来,我们肯定会考虑,那我们直接查看整个对象,看下能不能找到什么线索!

const measureKelvin = function () {
  const measurement = {
    type: 'temp',
    unit: 'celsius',
    value: prompt('Degrees celsius'),
  };
  console.log(measurement);
  const kelvin = measurement.value + 273;
  return kelvin;
};

console.log(measureKelvin());

在这里插入图片描述

这里我们找到真正的原因了,value的值是个字符串!(其实我们之前说过,使用prompt传入的值总是字符串)

3.修复错误

这时候我们就来修复它,修复它很简单,告诉对象它的值是number类型的即可

const measureKelvin = function () {
  const measurement = {
    type: 'temp',
    unit: 'celsius',
    value: Number(prompt('Degrees celsius')),
  };
  const kelvin = measurement.value + 273;
  return kelvin;
};

console.log(measureKelvin());

在这里插入图片描述

这样我们就修复了这个错误

除此之外,我们还可以使用浏览器断点的方式去查找我们的错误
在这里插入图片描述

我们可以点击你觉得会出问题的代码,将他打上断点,这样来执行串代码中,想运行到这行代码就停止,如果我们可以判断出,运行之前的代码没有出现BUG,那肯定出现bug的带代码就在这行!

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

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

相关文章

7.15 SpringBoot项目实战 【学生入驻】(上):从API接口定义 到 Mybatis查询 串讲

文章目录 前言一、service层 和 dal层方式一、Example方式方式二、Mybatis XML方式方式三、Mybatis 注解方式 二、web层 StudentController最后 前言 接下来我们实战【学生入驻】,对于C端学生端,一切交互开始于知道 当前学生是否入驻、是否有借阅资格&a…

【重新定义matlab强大系列十五】非线性数据拟合和线性拟合-附实现过程

🔗 运行环境:Matlab 🚩 撰写作者:左手の明天 🥇 精选专栏:《python》 🔥 推荐专栏:《算法研究》 #### 防伪水印——左手の明天 #### 💗 大家好🤗&#x1f91…

人绒毛膜促性腺激素(HCG)介绍

人绒毛膜促性腺激素 HCG)是妊娠期产生的一种肽类激素,由受孕后不久的胚胎产生,随后由合胞体滋养层(胎盘的一部分)合成。它的作用是防止卵子黄体的解体,从而维持孕酮的分泌,而孕酮对人类怀孕至关…

常用圆圈字符“圆圈字符替换器”

本文收录了162个常用圆圈字符,文内有“圆圈字符自动替换器”。 (本笔记适合熟悉字符串数据类型的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free:大咖免费“圣经”教程《 python 完全自学教程》&#x…

分享从零开始学习网络设备配置--任务3.6 使用默认及浮动路由实现网络连通

任务描述 某公司随着规模的不断扩大,现有北京总部和天津分部2个办公地点,分部与总部之间使用路由器互联。该公司的网络管理员经过考虑,决定在总部和分部之间的路由器配置默认路由和浮动路由,减少网络管理,提高链路的可…

PHP8中伪变量“$this->”和操作符“::”的使用-PHP8知识详解

对象不仅可以调用自己的变量和方法,也可以调用类中的变量和方法。PHP8通过伪变量“$this->”和操作符“::”来实现这些功能。 1.伪变量“$this->” 在通过对象名->方法调用对象的方法时,如果不知道对象的名称,而又想调用类中的方法…

互联网医院|互联网医院系统引领医疗科技新风潮

互联网的迅速发展已经改变了人们的生活方式,而医疗领域也不例外。近年来,互联网医院应运而生,为患者和医生提供了更便捷、高效的医疗服务。本文将深入探讨互联网医院的系统特点、功能以及未来的发展方向,为您展现医疗行业的新时代…

代码随想录算法训练营第23期day4| 24. 两两交换链表中的节点 、19.删除链表的倒数第N个节点、面试题 02.07. 链表相交、142.环形链表II

目录 一、(leetcode 24)两两交换链表中的节点 二、(leetcode 19)删除链表的倒数第N个节点 思路 三、(leetcode 160)链表相交 四、(leetcode 142)环形链表II 思路 一、&#xf…

使用华为eNSP组网试验⑴-通过Vlan进行网络设备间通讯

在2019年学习网络的时候是从思科产品开始学的,那个时候接触了思科的6506、4506、3750、3550、2950,因为网络设备多,基本上是在多余的设备上直接操作,掌握后再上现场设备中去操作。当时使用了思科的模拟器CISCO Packet Tracer&…

驱动开发练习,platform实现如下功能

实验要求 驱动代码 #include <linux/init.h> #include <linux/module.h> #include <linux/platform_device.h> #include <linux/mod_devicetable.h> #include <linux/of_gpio.h> #include <linux/unistd.h> #include <linux/interrupt…

google sitemap Sitemap could not be read

google一直也不提示具体原因。直到换个域名&#xff0c;发现可以提交sitemap。去别就是没有www的可以&#xff0c;带www的不行。应为sitemap的地址带www&#xff0c;但是sitemap里面的url内容是不带www&#xff0c;属于非法格式&#xff0c;所以一直报错。更正了sitemap地址后&…

数据库常用指令

检查Linux系统是否已经安装了MySQL&#xff1a; sudo service mysql start

89. 格雷编码

解题思路&#xff1a; 解法一&#xff1a;找规律&#xff0c;2-4位格雷码的码表如下图所示&#xff08;二进制表示&#xff09;&#xff1a; 可以发现&#xff0c;n位格雷码序列可以由n-1位格雷码序列得到&#xff0c;满足递归规则&#xff0c;具体构造规则如下&#xff1a; …

golang 通过案列感受下内存分析

package main // 声音文件所在的包&#xff0c;每个go文件必须有归属的包 import ("fmt" )// 引入程序中需要用的包&#xff0c;为了使用包下的函数&#xff0c;比如&#xff1a;Printinfunc exchangeNum(num1 int, num2 int){var t intt num1num1 num2num2 t }…

stc8H驱动并控制三相无刷电机综合项目技术资料综合篇

stc8H驱动并控制三相无刷电机综合项目技术资料综合篇 🌿相关项目介绍《基于stc8H驱动三相无刷电机开源项目技术专题概要》 🔨停机状态,才能进入设置状态,可以设置调速模式,以及转动方向。 ✨所有的功能基本已经完成调试,目前所想到的功能基本已经都添加和实现。引脚利…

【云原生】聊聊为什么需要docker以及其基础架构

为什么需要docker 在没有docker之前&#xff0c;我们开发、测试、生产其实是根据不同的服务器进行配置的&#xff0c;很可能因为软件配置不同而导致的生产事故&#xff0c;那么如果能较好的解决软件和配置等封装成一个可运行的软件&#xff0c;无需关注配置&#xff0c;那么是…

<十三>objectARX开发:模拟实现CAD的移动Move命令

一、目的 实现类似于CAD的移动命令,选择对象,移动到指定位置,移动过程中对象跟随鼠标移动。效果如下: 二、关键步骤 选择对象,打开实体判断类型:acedEntSel()、acdbOpenObject()、isKindOf()。指定基点:acedGetPoint()。移动模型,追踪光标移动对象实体:acedGrRead()…

gitee生成公钥和远程仓库与本地仓库使用验证

参考文档&#xff1a; https://help.gitee.com/base/account/SSH%E5%85%AC%E9%92%A5%E8%AE%BE%E7%BD%AE(1)通过命令ssh-keygen 生成SSH key -t key类型 -c注释 ssh-keygen -t ed25519 -C "Gitee SSH Key" (2)按三次回车 (3)查看生成的 SSH 公钥和私钥&#xff1a; …

SOLIDWORKS Simulation:优化设计的利器

SOLIDWORKS Simulation是SOLIDWORKS软件家族中的一员&#xff0c;是一款强大的工程仿真分析工具。它通过模拟和分析&#xff0c;帮助工程师们更好地理解和评估设计方案的性能&#xff0c;并通过优化设计来提高产品质量和效率。这篇文章我们将介绍SOLIDWORKS Simulation的特点、…