jacoco引起的ArrayIndexOutOfBoundsException
问题:公司一老项目在测试环境突然出现java.lang.ArrayIndexOutOfBoundsException: 27异常,而且都是相同DTO类,但是仔细检查发现只是简单的获取对象属性值,有string类型,也有integer类型,觉得很奇怪,开始以为是读取redis缓存的反序列化有关,后面仔细检查发现不从缓存读的对象也有问题,而且很多地方报的都是不同的字段,于是相同的代码切到其他环境和本地测试,都没复现问题。
解决办法:
1、根据其他环境没出现类似问题,首先推测可能是框架包有人调整引起,于是删除了本地所有框架包,重新获取最新的,最后没发现问题;
2、检查测试环境的代码,下载测试环境的war包,通过反编译查看反编译后的代码有没有什么异常,结果也没发现什么问题,直接启动测试环境的war包,发现也没问题;
3、询问运维有没有在测试环境改动过什么配置,最后结果是也是没改;
4、在其他都检查没问题,最后只能看下这个DTO类是变成了什么才会随机引发ArrayIndexOutOfBoundsException异常,通过对测试环境代码对该对象做反射打印出所有的属性名称,属性值,属性类型,重新发布测试环境后,最后在检查日志的过程中惊奇的发现对象中多了
name=$jacocoData,value=[true, true, false, false, false, true, true, false, false, false, true, true, true, true, true, true, true, true, true, true, true, true],type=[Z,field=private static transient boolean[]
com.xxx.$jacocoData的一列属性,然后就恍然大悟,估计就是这个jacoco框架引发的,最后询问测试人员,终于得到他们在jenkins新配置的答复
5、在怀疑是jacoco的问题,于是准备在本地复现下ArrayIndexOutOfBoundsException异常
配置过程:
1、下载jacoco:https://search.maven.org/remotecontent?filepath=org/jacoco/jacoco/0.8.7/jacoco-0.8.7.zip
2、idea配置启动的VM options:
-javaagent:F:\java\jacoco-0.8.7\lib\jacocoagent.jar=includes=*,address=127.0.01,port=6300,output=tcpserver,append=true;
3、启动项目,telnet 127.0.0.1 6300,检查下6300端口如果已监听,说明服务端 Jacoco 启动成功。

浙公网安备 33010602011771号