这周做的项目遇到2个费了很多时间才解决的bug,解决之后,发现根本问题并不是什么很难的技术难点,都是因为自己在写代码的过程中,思维不够清晰。还有一个需要再提高的地方就是解决问题的思维,如何快速定位到问题。

第一个bug很严重:本地前后端联调没有问题,而且调的是和测试环境一样的接口,但是测试环境就是报length为undefined

和同事从晚上8点多一起找问题到晚上12点都没有解决好这个问题。问题出现前我做了一波这样的操作,改了一次代码然后提交到测试环境(自己本地没测试到位就提交了,就是最大的问题),然后就发现挂了。现在想想如果是老赵解决这个问题,他一定会问我刚刚改了些什么,然后会让我把刚刚改的改回去,再去排除bug。如果我们当初改这个bug的时候,是先这样思考的,那么我们也就不会为这个bug花那么多无用的时间了。最终定位到问题的时候,确实是我提交前改的那个变量写错了,这个变量不是一个数组。

如果真的想不起来自己刚改了什么,也应该是先去从那些调用了length的变量上去排除,将所有的可能的数组变量替换成[]一个空值再来判断。

回顾这个问题,想起一件有趣的事情。

第一个,测试环境有问题,但是本地没有问题,说明本地环境还是不行的,出了问题不报错,这是一个需要去思考看能否优化的点,本地环境是否能和测试环境保持一样的环境。至少本地环境能像测试环境一样有问题能在console中暴露出来。第二个,拿到这个问题,我第一个去检查传的数据是否正确,我定位了所有会调用到的方法,最后发现都可以一一执行,数据传递都正常但到最后还是会报length为undefined,我当时就蒙圈了。到底是因为什么原因?现在发现其实定位这个问题并不难,再多想想,拿到数据之后会干嘛?拿到数据当然就是去渲染dom啦,这里就应该怀疑是渲染dom出错了,问题就浮现水面了,dom上有个不是数组的变量读取了length,再去一一排除可能的数组变量就能解决问题了。

第二个bug:数据改变,需要重新触发dom渲染高度。采用js操作dom,重新设置元素高度,但是无效。

场景:切换月份获取当月的数据,对应的表格元素的高度要自适应内容的高度,表格的每一行有一个跨单元格的悬浮的div,这个div中包含内容,当前的行的表格单元格的高度要和这个div的高度保持一直。高度采用js计算,在刚开始进入这个页面的时候就会在等到拿到数据并渲染dom之后去调用这个js逻辑去读取表格中每一行包含的这个悬浮的div的高度,然后再去给对应行的表格的单元格设置对应高度。

按理说操作dom,重新给元素赋值高度是可以,但是不行的时候,是为什么不行?这个方案最后结果不是我们想要的,就要去排除是什么原因导致的不行,如果最后排除原因是方案不行就要换方案,没有排除原因都不能去想着换方案。

高度没有按预期去渲染,看下想要设置的数据是否是正确的,永远打印整个变量去检查数据,因为这次从数组中去读取数据就是打印的其中的部分数据,结果才迟迟没有定位到真的问题,最后发现数据读的总是前面部分的数据,定位到问题是切换月份没有置空之前数组中的数据。

总结:

  1、问题的表象不一定就是真的问题所在,比如第一个bug,看上去像是环境问题导致的,其实不是,只是本地也出错了没有把错误暴露出来,问题根本原因还是代码问题。

  2、解决问题的思路:数据渲染没按预期渲染,检查数据,从预期结果出发,先思考预期结果什么样,然后看看实际结果是什么,思考实际结果出现的原因,问题就浮现了。

12月中旬项目中出现的几个bug解决方法的思考的更多相关文章

  1. 项目总结---- imageLoder 的2个Bug解决方法、1.9.4如何选择性删除disk缓存和其它一些错误。

    我们不说废话,直接入主题,抓紧时间写完,好继续找bug... (PS:imageLoder的bug 百度不到的哦,不过我坚信我的观点没错) 版本1.9.2,1.9.4我没测试 1,imageLoder ...

  2. Type.GetType()反射另外项目中的类时返回null的解决方法

    项目1:ProjectA namespace ProjectA { public class paa { .... } } Type.GetType("paa")返回null Ty ...

  3. electron项目中使用jquery不生效的解决方法

    才开始接触electron的时候,本来想用bootstrap快速搞一个demo,无奈有些功能没法用,之后才意识到是jquery没发用,之后找了一些资料,比较简单的方式就是在引入jquery之前加入一下 ...

  4. [Android Studio Problems]记录克隆项目中遇到的坑(问题)以及解决方法

    ①Migrate project to Gradle? 问题描述: This project does not use the Gradle build system. We recommend th ...

  5. 【Vue中的坑】vue项目中动态绑定src不显示图片解决方法

    v-for绑定src的数据如下: data() { return { img_src:"../../assets/images/mirror-service.png" } } 渲染 ...

  6. vue中npm run dev运行项目不能自动打开浏览器! 以及 webstorm跑vue项目jshint一直提示错误问题的解决方法!

    vue中npm run dev运行项目不能自动打开浏览器!以及 webstorm跑vue项目jshint一直提示错误问题的解决方法! 1.上个项目结束就很久没有使用vue了,最近打算用vue搭建自己的 ...

  7. jquery中checkbox全选失效的解决方法

    这篇文章主要介绍了jquery中checkbox全选失效的解决方法,需要的朋友可以参考下     如果你使用jQuery 1.6 ,代码if ( $(elem).attr(“checked”) ),将 ...

  8. 记一次SpringBoot 开发中所遇到的坑和解决方法

    记一次SpringBoot 开发中所遇到的坑和解决方法 mybatis返回Integer为0,自动转型出现空指针异常 当我们使用Integer去接受数据库中表的数据,如果返回的数据中为0,那么Inte ...

  9. 编程中遇到的Python错误和解决方法汇总整理

    这篇文章主要介绍了自己编程中遇到的Python错误和解决方法汇总整理,本文收集整理了较多的案例,需要的朋友可以参考下   开个贴,用于记录平时经常碰到的Python的错误同时对导致错误的原因进行分析, ...

随机推荐

  1. hadoop之安装

    在Linux环境下安装Hadoop:    一.安装环境 硬件:虚拟机 操作系统:Centos 6.4 64位 IP:192.168.153.130主机名:imooc安装用户:root        ...

  2. Python *Mix_w3

    1.基本数据类型(int,bool,str) int 整数 str 字符串. 一般不存放大量的数据 bool 布尔值. 用来判断. True, False list 列表.用来存放大量数据, []表示 ...

  3. OO课程中IDEA相关插件的使用

    写在前面   由于OO课程博客作业的需要分析代码的复杂度并绘制UML图,但是课件上推荐的分析工具(http://metrics.sourceforge.net )经过自己几个小时的折腾还是没有安装成功 ...

  4. tp5 base64 图片上传

    /** * 保存图片 */ public function uploads($value='') { // $file = base64_decode(request()->file('imag ...

  5. 将GETDATE()转换为指定日期格式的varchar类型

    CREATE FUNCTION [dbo].[FormatDate] (@date as datetime, ) ) ) AS BEGIN ) set @datestring=@formatstrin ...

  6. mysql中外键的创建与删除

    外键的创建 方法1:创建表的时候设置(外键名随机生成) 1.前提条件,必须要有一个主表,这里设为persons 2.主表中必须设置主键字段primary key,这里设为id_p //创建数据库dat ...

  7. Appium·基础+项目

    date:2018609 day13 一.Appium Appium是一个开源.跨平台的测试框架.可以用来测试原生以及混合的移动端应用. 1.安装操作 ①.安装Appium-Python-Client ...

  8. 设计一款相册APP,代替系统自带的相册功能,列举主要功能

    分析:先分析原生相册的不足,用户需求痛点,然后描述下界面设计,并说明为什么用户要使用你的产品.       iOS系统手机,自带的相机有基础的拍照,基础的美颜效果.除了本地存储,还有icloud可以存 ...

  9. C++11 类型后置语法

    #include <iostream> #include <typeinfo> #include <type_traits> using namespace std ...

  10. 3.2 unittest执行顺序

    3.2 unittest执行顺序 前言很多初学者在使用unittest框架时候,不清楚用例的执行顺序到底是怎样的.对测试类里面的类和方法分不清楚,不知道什么时候执行,什么时候不执行.本篇通过最简单案例 ...