BUG随记

DEBUG常识选项:(debug模式下,直到空白页出现,alt+“←”,返回到问题出的地方,如果是方法点进去,继续)
正常调试我不想多说,往往我们思维存在一定定式,调试一定要是画面→数据库→到画面。但有时我们发现,不清楚业务,发现条件怎么都无法进入另一个判断或循环。此时,我们换个思维,直接去改debug栏下变量让强制进去(当然返回结果是不对的),这样我们就可以看到sql句,这样拿着结果去分析参数等,即可。
举例上面两种情况:
1,我们常见的固有思维,不需要举例就明白。
2,debug下,修改变量值和对象值得方法。(优点:我们不需要去数据库改数据来完成要求,只需要debug栏修改即可)
前提准备(下面的测试类只是为了说明问题,不具有实际作用)在这里插入图片描述

public class DebugTest {
public static void main(String[] args) {
     EmployeeEntity employeeEntity = new EmployeeEntity();
     //employeeEntity = null;
     List<EmployeeEntity> lists = new ArrayList<EmployeeEntity>();
     // lists.add(employeeEntity);
     DepotEntity depotEntity = new DepotEntity();
     depotEntity.setDepotEntities(lists);

     if (depotEntity.getDepotEntities().size() != 0) {
        System.out.println("yo did it");
    }
}
}

debug下我们发现,lists是空,不满足条件(因为我们去掉了set),但是有时为了测试方便,这里我们介绍一种不改前台输入,直接后台设置的方式。
在这里插入图片描述
注意事项:1,要用完整的包名,用List有完整包名,ArrayList没有,这是因为List接口有很多包,但ArrayList是唯一的包。因此我们写这个时候。2,选择的是对像名,而不是下面的elementData。

常见BUG,
1,空指针:debug模式下,定位 -> 查找具体的空值原因(一定定位定到某个值)
修改方式:例如:

 1.1,long a = b.getD() == null? 0: b.getD();
 1.2,在前台传入时,增加check
 1.3,还不是,后台增加逻辑块去处理,或者sql做check
 注意,String是可以可以转null,需要留意。

2,error为“ ”(中间为空格或者tab时),处理用trim()函数,去掉多余的空格等,去两头留中间。
例如:找到d ==“ ”,a = b.getD() 需要加判断

a!=null&&!"".equals( b.getD().trim())或者b!=null&&b.getD().trim().isEmpty();

“”.equals( )这种方式可以避免空指针。
3.无字段,依然要去获取或一个对象中不存在一个对象(注意:如果判断对象.size()等,在循环中有获取不存在对象,对象为空,不执行bug处,就与bug无关)
前者:对应方式,增加字段。后者同理。

3.数组越界。index.解决方式:增加>if判断不越界

4.null的转换问题,null可以强转为任何类型,但是返回的结果依然是null

5.get/set的问题,前提保证对象必须保证不为null的(特别说明,无论数据库返回对象,还是自己前台传来的对象,都必须保证)

6.项目出现感叹号时,无疑是jar导入问题;或者出现实体引用问题,也有可能是jar包问题(也有可能是未导包)

9.有时候发现sql查出的结果明明是没有任何信息, 但是 list却不为null。原因:①因为各个关键子段为null也算是个结果集,要排除要加上isEmpty;②其次null的时候还没有分配内存,空的时候是已经分配了内存只是还没有写入值(java虽然没有指针,但是其实只有的)。但是最根本的mybatis中已经封装好的,这个只能去看mybatis的源文件。

10.我们来说说try catch扑捉异打印。通常BUG我们是通过e.printstack()或者throw抛出,打印到控制台,根据此去修改bug。但是一旦涉及框架抛出的异常的错误,我们就需要屏蔽不是框架的异常,也就简单将e.printstack()或者throw注释掉。

11,说明:资源路径位置类型 超级类"javax.servlet.http.HttpServlet"在Java建造路径中
在这里插入图片描述

12,org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: file [E:\ownStudy.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\StudySpringMVC\WEB-INF\classes\com\ssm\dao\CustomerMapper.class]; nested exception is java.lang.IllegalArgumentException

一看就是jar冲突:spring官网说了,要使用java8,只支持spring 4.X以上版本,而spring的使用最低java要求java5及以上;
两种方案:1,升级jar包;2,降低Apache版本运行

SpringBoot报错看法:
Description:是出错的描述。Action:是问题的解决方式。
在这里插入图片描述

13.这种说不能参数化问题。很可能是导包出错,或者class名和下面下同导致不能参数化。
在这里插入图片描述
14,Uparseable(不可解析) date (日期);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值