遇到BUG怎么办?

键盘屏幕前,阿锋急的是满头大汗,控制台上的红色神秘符文,已经多次出现,

这也预示着阿锋的情绪已经在红温的边缘,马上就要崩溃了!“这完蛋的bug究竟是怎么回事儿啊?!

图片

今天千锋前端虎哥——给你一文解千愁,让你知道bug是怎么来的!也让你知道bug是怎么没的!

一、为什么会出现bug

bug的出现是由于预期与实际之间产生了偏差。白话说就是意料之外。造成bug的原因有几种:

    1、  对所写的代码或者逻辑并不清晰,迷迷糊糊

    2、  覆盖场景不全面,容错率不高

    3、  所使用的第三方代码本身存在bug

举一个例子,一个程序员的女朋友让程序员本人去买苹果。一个经验丰富的程序员会追问对方:是要超市的还是路边摊的?是大的还是小的?是甜的还是酸甜的?是烟台产的还是陕西产的?是富士还是国光或其他品种?等等。一系列问题问完后,女友可能会说算了,我自己去买吧。从这个场景中,我们可以看到,尽可能地考虑各种可能性,以获得更准确的结果,这样出现bug的概率就会更低。

二、bug都有哪些类型

    1、CSS的bug:这种bug通常是由自己编写的CSS代码导致的,或者对已存在的CSS bug不够熟悉。例如高度塌陷、margin-top垂直穿透等问题。

    2、使用第三方组件时出现的bug:这种bug多数情况下是由于没有仔细阅读组件文档,或者组件本身存在bug所导致的。

    3、JavaScript的bug:作为重点讨论的一类bug,前端开发中最常见且最难解决的问题。下面我们将重点讨论JavaScript bug。

JavaScript的bug可以分为以下几类:

● 语法错误:例如缺少分号、括号不匹配等。

● 逻辑错误:代码的逻辑错误导致程序运行不符合预期。

● 类型错误:使用了错误的数据类型或执行了不兼容的操作。

● 异步问题:由于异步操作的执行顺序或时间问题,导致出现bug。

● 作用域问题:变量的作用域不正确,导致访问错误的变量或函数。

● 浏览器兼容性问题:不同浏览器对JavaScript的支持程度不同,导致在某些浏览器上出现bug。

以上是常见的JavaScript bug类型,当然还有其他可能的类型。在调试和解决JavaScript bug时,可以使用开发者工具、日志输出、断点调试等技术手段来定位和修复问题。

三、解决bug的方法

1.  思路,思路一定要捋清楚,bug是哪种类型引起的

   (1) 语法类错误,这个提示很明确,缺少符号、字母、或者是字写错了,代码格式化很重要

    (2)写错了单词,一个“alert”和”alter” ,不仔细看是不是看不出区别?一个是弹窗口,另一个是修改的意思,完全不是一个东西。再来一个”test”和”text” 看起来也很像,自己回看的时候是不是看出不来(看不出来)?这种错误是坑自己特别狠的,解决这类问题需要仔细对比每一个单词或者删掉重新写

    (3) 前后端交互,数据产生的bug,后端完全不按套路出牌,给的数据有时候偏偏没有某个字段,而接口文档中有,这个锅指定后端来背,我们不可能把所有的字段都校验一遍空,由前后端交互引起的bug优先排查ajax的返回值

2.  debug工具的熟练运用(重点)

谷歌浏览器为我们提供了功能完备的bug调试工具,按F12,调出控制台,首先看控制台里面有没有输出js的异常。

(1)控制台有错误。

我们来伪造一个异常看看这个异常如何排查,有如下代码

<script setup>
import { RouterLink, RouterView } from 'vue-router'
import HelloWorld from './components/HelloWorld.vue'
consoel.log('test') //此处写错了
</script>

在浏览器的控制台中会输出

图片

看到一堆错误时,不要慌张,找到我们熟悉的文件名(App.vue:20:1),点击进去查看,可以找到代码所在的位置。结合报错详情:consoel is not defined,这个错误表示consoel未定义,未定义可能是因为没有正确引入或者拼写错误。修正这个错误即可。

图片

(2)如果控制台没有错误

偏偏出不来我们要的数据,UI没有被渲染,这种问题又要怎么解决呢?答案是截断,在渲染之前使用console.log或者设置断点来查看代码运行过程中的数据。

        1)使用console.log方式

咱们先来一段错误的代码

<template>
  <button @click="getData">获取数据并显示</button>
  <ul>
    <li v-for="item in mydata.lidata">{{ item }}</li>
  </ul>
</template>
<script setup>
import { reactive } from 'vue'
//ajaxData假设为服务端返回的数据
let ajaxData = {
  code: 200,
  msg: "ok",
  data: [100, 200, 300, 500, 900]
}
const mydata = reactive({
  lidata: []
})
function getData() {
  //拿到返回的数据,设置一下
  mydata.lidata = ajaxData //这里有错误
}
</script>

原有的业务本意是将返回数据ajaxData.data设置给响应式数据mydata.lidata,但手滑了一下,写岔劈了,把响应的结果整体赋值给了mydata.lidata,导致页面显示如下:

图片

我们用console.log打印mydata.lidata的值,console.log(mydata.lidata)

function getData() {
  //拿到返回的数据,设置一下
  mydata.lidata = ajaxData //这里有错误
  console.log(mydata.lidata) //在这打印
}

当我们看到控制台打印的数据时,应该反应过来,发现这个数据肯定是不正确的。如果我们期望的数据应该是一个数组而不是一个对象,那么我们可以将代码修改为mydata.lidata = ajaxData.data,这样就可以解决问题了。

图片

(2)断点工具的使用

使用谷歌浏览器,按f12,调出如图的工具,切换到source选项卡处,找到我们写的代码

图片

代码外的行号处,点一下宝贵的左键,如图所示:

图片

这个断点不是瞎点的,是代码会运行到这里时会停留在此处。在页面按钮上点击一下触发这个函数,此时看到如下图

图片

再接下来,将鼠标移动到您想要查看的变量上,停留2秒钟不要移动(如下图所示的绿框),查看变量的值是什么。根据观察和分析的结果,修复bug,并记得断点放行

图片

 和取消断点(与添加断点相同的操作)

图片

当然!断点调试是一项强大而有用的工具,具有许多功能可以帮助我们分析和解决bug。如果希望详细了解断点调试的各种功能和技巧,咱们再单独写一篇文章来探讨。在那篇文章中,我们可以深入讨论如何添加多个断点、逐步执行代码、查看变量值、跳转到下一层代码等

(3) 搜索引擎的使用

大多数小伙伴遇到问题会优先搜索引擎,但往往找不到适合自己的答案。使用搜索引擎搜索问题是需要技巧的,要清楚的问搜索引擎问题,不是把问题丢给搜索引擎。再通过多篇文章的对比,找到和自己情况相符合的答案。另外程序员们有个不成文的习惯,搜索引擎的结果第一条和第一页的往往没有特别精准的答案

(4)AI辅助工具的使用

描述不清楚也没事,AI大概都能懂

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYVIHOZH' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片