问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

findBugs 这个报的是什么错误

发布网友 发布时间:2022-04-07 18:35

我来回答

2个回答

热心网友 时间:2022-04-07 20:04

FindBugs是静态分析工具不是错误。

它检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题。有了静态分析工具,就可以在不实际运行程序的情况对软件进行分析。不是通过分析类文件的形式或结构来确定程序的意图,而是通常使用 Visitor 模式。

在FindBugs的GUI中,需要先选择待扫描的.class文件(FindBugs其实就是对编译后的class进行扫描,藉以发现一些隐藏的bug。)。如果你拥有这些.class档对应的源文件,可把这些.java文件再选上,这样便可以从稍后得出的报告中快捷的定位到出问题的代码上面。此外,还可以选上工程所使用的library,这样似乎可以帮助FindBugs做一些高阶的检查,藉以发现一些更深层的bug。

扩展资料

findBugs检查的bug类型包括:

1、Malicious code vulnerability:恶意代码

2、Dodgy code:不符合规范的代码

3、Internationalization:国际化相关问题,如错误的字符串转换;

4、Bad practice:坏的实践:常见代码错误,序列化错误,用于静态代码检查时进行缺陷模式匹配;

5、Multithreaded correctness:多线程的正确性:如多线程编程时常见的同步,线程调度问题;

6、Performance:运行时性能问题,如由变量定义,方法调用导致的代码低效问题。

7、Correctness:可能导致错误的代码,如空指针引用等;

8、Experimental:可能受到的恶意攻击,如访问权限修饰符的定义等;

9、Security:安全性

参考资料来源:百度百科-FindBugs

热心网友 时间:2022-04-07 21:22

  FindBugs常见错误描述和解决方法

  (一)
[DLS_DEAD_LOCAL_STORE]
描述: Dead store to 未使用的局部变量
解决方法:局部变量定义后未使用;实例化对象后又重新对该对象赋值

(二) [ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD]
描述:Write to static field 通过实例方法更新静态属性
常见于常量类,直接通过类名.常量名获取的方式违背了封装的原则,findbugs不提倡使用,而如果将常量改成静态成员变量,又因为spring不支持静态注入导致不能实现,解决方法是非静态的setter调用静态的setter方法给静态成员变量赋值。
解决方法:
常量类F:
class F{
public static String a = “123”;
}
常量a改为静态成员变量,通过F.getA()获取,且由于spring不支持静态注入,改为:
class F{
private static String a;
public static Integer getA() {
return a;
}
public void setA(String a) {
setAValue(a);
}
public static void setAValue(String a) {
F.a = a;
}
}

(三) [BX_UNBOXING_IMMEDIATELY_REBOXED]
描述: Boxed value is unboxed and then immediately reboxed 装箱的值被拆箱,然后立刻重新装箱了
常见的是三目运算时,同时存在基本类型和包装类型。
解决方法:
Integer a = null;
//...
a = (a == null)?0:a;
此问题在于a不为null时,会被拆箱,赋值时再装箱。这是自动装箱拆箱的特性,只要运算中有不同类型,当涉及到类型转换时,编译器就会向下转型,再进行运算。修改方法,统一类型:
Integer a = null;
//...
a = (a == null)?Integer.valueOf(0):a;

(四) [SE_BAD_FIELD]
描述: Non-transient non-serializable instance field in serializable class在可序列化的类中存在不能序列化或者不能暂存的数据
解决方法:
方法1:序列化该对象
方法2:当采用struts2框架开发,不可避免的此问题会大量出现,因为ActionSupport实现了序列化接口,action继承了此类,而service没序列化,所以在action中引用service对象时提示此错误,最简单的解决方法是将service对象声明成transient,即service不需要序列化
方法3(未验证):To avoid java serialization you need to implement writeObject() and readObject() method in your Class and need to throw NotSerializableException from those method.(action中实现这两个方法?)
private void writeObject(java.io.ObjectOutputStream stream) throws java.io.IOException {
throw new java.io.NotSerializableException( getClass().getName() );
}
private void readObject(java.io.ObjectInputStream stream) throws java.io.IOException, ClassNotFoundException {
throw new java.io.NotSerializableException( getClass().getName() );
}

(五) [NP_LOAD_OF_KNOWN_NULL_VALUE]
描述: Load of known null value加载已知是null的值
解决方法:已知方法参数为null是,直接传递null而不是参数名

(六) [REC_CATCH_EXCEPTION]
描述: Exception is caught when Exception is not thrown 过泛地捕获异常或捕获异常后未做任何处理
解决方法:异常分类捕获(至少要打印出此异常对象)

(七) [NP_NULL_PARAM_DEREF]
描述: Null passed for nonnull parameter 把空值传给了非空的参数
解决方法:增加非空判断

(八) [NP_IMMEDIATE_DEREFERENCE_OF_READLINE]
描述: Immediate dereference of the result of readLine() 立即引用了readLine()的结果
解决方法:判断readLine的结果是否为空

(九) [EI_EXPOSE_REP] 恶意代码漏洞
描述:may expose internal representation by returning getter方法返回引用类型
eclipse自动生成的引用类型(Object、数组、Date等)的getter、setter方法会得到或通过对可变对象的引用操作而暴露代码内部实现,解决方法很多,只要返回的或赋值的对象不是原引用对象即可。
解决方法:
以Date类型为例:
public Date getHappenTime() {
if(happenTime != null){
return (Date) happenTime.clone();
}
return null;
}

(十) [ EI_EXPOSE_REP2] 恶意代码漏洞
描述:may expose internal representation by storing an externally mutable object into setter方法返回引用类型
eclipse自动生成的引用类型(Object、数组、Date等)的getter、setter方法会得到或通过对可变对象的引用操作而暴露代码内部实现,解决方法很多,只要返回的或赋值的对象不是原引用对象即可。
解决方法:
以Date类型为例:
public void setHappenTime(Date happenTime) {
if(happenTime != null){
this.happenTime = (Date) happenTime.clone();
}else{
this.happenTime = null;
}
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
手机导航地图语音怎么下载 如何分别真金和仿金首饰 怎样区分真金和仿金首饰呢 小学生新年晚会主持人的串词!!(不要太多)急 大大后天就需要了!!!_百度... 周年晚会策划公司 奥格瑞玛传送门大厅在哪 奥格瑞玛传送门大厅怎么走 锻炼颈椎的几个动作 水多久能结冰 冰能在多长时间内形成 请问水低于0度会结冰吗? 如何防止脱发严重 个人所得税APP里怎么交工会费? 奥特曼穿什么衣服 奥特曼里面穿的是什么? 奥特曼的衣服都有什么样的颜色,你见过黑色衣服的 了解 找出 乘做五路公交车 用英语的翻译法? 乘公交车的英文怎么写 五仁酱丁咸菜的做法 新买的冰箱为什么会留出来象黄酱颜色的液体 坐26六路公交车怎么翻译(英语) "乘坐901路公交"用英语翻译过来怎么说 冰箱底部 漏棕色的水 是怎么回事? 402路公交车路线用英语怎么说 公交 英语 放青豆芝麻瓜子仁白萝卜郫县豆瓣酱的咸菜怎么做,味道有点辣还有点咸 如何用英语翻译公交线路名称 冰箱不制冷有蓝色液体流出是什么坏了 乘坐5路公交车 用英语怎么说 冰箱后面储水盒下面有绿色粘稠物是什么? 肉丝腌菜青豆仁的做法大全 乘坐6路公交车,用英语怎么说 为什么奥特曼要穿紧身衣 穿蓝衣服的奥特曼和穿红衣服的奥特曼有什么区别? 奥特曼衣服多少钱? 物业公司能耗分析报告怎么写? 能耗在线监测系统可以形成相应的数据分析报告吗? 泰罗奥特曼里的赛特队的衣服哪里有卖? 地税申报系统怎么报个税啊?以前听他们说全员全额与非全员全额,搞不懂,还有工会经费也不明白, 水电气消耗统计分析报告怎么写 如何编写重点用能行业单位产品能耗限额标准执行情况报告 qq问问怎么答题 可研报告中,能耗分析耗液化气量要怎么计算??? 黑白衣服奥特曼叫什么 热力供暖能耗水,电,气分析怎么写 谁有学校能耗分析报告 奥特曼身上的是他们穿的衣服嘛,, 在qq上怎么加我时答题 企业能耗分析报告一般包括哪些内容 迪迦奥特曼的外形衣服哪里可以买?我想要一件,超爱迪迦的! 为啥迪迦奥特曼有俩身衣服? 编写节能评估报告书需要企业提供哪些材料? 谢谢各位仁兄热心解答