bug查找思路总结及常见错误

解决bug总结:

1:首先确认这是不是一个bug,可能是因为运行环境导致出现该现象;可能是因为某种依赖的服务未开启导致,例如报502,503等错误;redis连接超时。对于和数据库数据相关的bug,例如数据不显示。先用查询语句,使用这个bug的相同的条件查询相关表,看是否存在数据。

2:确认bug的确存在,开始调试。可以使用接口调试工具对接口直接调试,通过打日志的方式或者本地debug查看信息。

3:常见的错误:

     1.空指针异常。这种错误一般是在使用某个字段时未作判空处理。尤其是在从某个对象中取字段,而该对象是空,从而报空指针异常,在对象相关的 get,set方法处仔细检查,快速定位。特别提醒:在打日志时更需要注意空指针,如log.info(a.toString()),此时如果a对象为空,就会报空,而如果没有try/catch时,很难定位错误;容易误导是正常逻辑代码出现错误。

     2.在循环中,使用List。伪代码如下:

                  Object a = new Object ();

                  List<Object> list = new ArrayList<>();

                  for(int i = 0 ; i< 10 ; i++){

                      a.setX(i);

                     list.add(a);

                  }

    最终输出list 中的每个对象,可能会出现  后 几个对象的X 值完成相同(最后一个对象的值9)。

   对于在循环中,往list 中添加对象。list发现对象 用和之前元素一样(a的引用一直没变),就覆盖掉了之前add的对象。所以循   环之后list中的对象是重复的对象。

解决方案:

                  Object a ;//声明对象

                  List<Object> list = new ArrayList<>();

                  for(int i = 0 ; i< 10 ; i++){

                       a = new Object(); // 实例化对象

                      a.setX(i);

                     list.add(a);

                  }

     3.在try/catch块中,可以将异常信息打印,方便调试。如:log.error(e.getMessage())。有时候可以为了调试增加try/catch 捕捉异常。调试完后,可以去除try/catch。

     4. 

   if( !returnMsg.equals("")){
      errorMsg = returnMsg;
      authBo.setMessage(YaDouParaCommom.ROOM_IDCARD_AUTH_FAILED_MSG);
      authBo.setValidateError(errorMsg);
      return false;
   }

       重点关注 if条件里面的表达式。 returnMsg.equals("")  和 "".equals(returnMsg)在某种情况下是不一样的。如果 returnMsg的值为null , 那么  returnMsg.equals("")会报 null 异常。而"".equals(returnMsg)则不会。这个bug是在和别人系统对接时,别人的接口返回回来的returnMsg字段。 然而,接口文档里面,返回信息对应的字段是returnMsg ,而真实返回信息对应的字段是msg。导致json封装对象时该returnMsg字段的值为null。

     在与其他系统后调用别人写的接口时,最好在调用后立即打印(在转为java对象前)真实返回值,一般是json字符串。观察返回值与封装对象的属性是否 相对应。

   

 

   后续仍会继续更新!

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值