博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
findbugs静态代码分析工具使用教程
阅读量:5923 次
发布时间:2019-06-19

本文共 1771 字,大约阅读时间需要 5 分钟。

FindBugs 是一个静态分析工具,很多程序猿都在使用,再次详细列出findbugs的使用教程,希望对大家有帮助。

1 安装

FindBugs通过检查类文件或 JAR文件,将字节码与一组缺陷模式进行对比从而发现代码缺陷,完成静态代码分析。Findbugs有两种工具形式,一种是界面形式另一个是插件形式,能够在liunx上部署,为了使用方便这里使用插件的形式,具体安装步骤如下:

Eclipse —> help —> Eclipse Markerplace.. 搜索findbugs如下图所示,点击install一直往下安装即可

findbugs.jpg

验证:在window —> Preferences 中搜索findbugs 如果出现即为安装成功

项目右键 —> findbugs能够找到findbugs即为安装成功

2运行

2.1项目(类)右键 —> Find Bugs —> Find Bugs,如图:

ccc.png

2.2FindBugs插件的3个功能WorkSpace,如图:

ddc.png

Bug Explorer:这里显示的是用FindBugs对这个项目(类)扫描的结果。如图所示可以看出该项目(类)共有 3个bug,在代码中有臭虫标记,此处为检测为“可能存在空指针”的异常,在该异常上右键可以跳到Bug Info查看详细信息。

找出的bug有多种颜色,黑色的臭虫标志是分类,红色的臭虫表示严重bug发现后必须修改代码,橘黄色的臭虫表示潜在警告性bug尽量修改。

findbugs1.png

Bug Info:这里是对BUG问题的描述,包括:Bug类别、等级,Bug的定位,对Bug的解释。Bug等级可根据后面跟随的数字确定影响,数字越小Bug漏洞越危险。Bug对应位置请看下图。

findbugs2.png

3规则 & BUGS

Detector Configuration:在这里你可以选择所要进行检查的相关的Bug Pattern条目,你可以根据需要选择或去掉相应的检查条件。

findbugs3.png

Minimum confidence to report:这个选择项是让你选择哪个级别的信息进行显示,有Low、Medium、High三个选择项可以选择。 比如:

选择了High选择项,那么只有是High级别的提示信息才会被显示;

选择了Medium选择项,那么只有是Medium和High级别的提示信息才会被显示;

选择了Low选择项,那么所有级别的提示信息都会被显示。

Minimum rank to report:设置显示报告的最低等级,图为1—15级的显示报告。

findbugs4.png

Filter files:用户自定义过滤文件。用户可以通过查看教程自己编辑XML文件来指定项目时候对一些bug(类型)进行检测或不检测,支持通配符,其中Include filter files为指定检测bug,exclude filter files为不检测bug,对于exclude baseline bugs可以从添加分析得出的XML结果用来排除不检测。具体XML文档格式如下:

findbug5.png

findbugs6.png

常见bugs:

NP_NULL_ON_SOME_PATH_EXCEPTION:代码调用时, 遇到异常分支, 可能造成一个对象没有获得赋值依旧保持NULL空指针。 接下来如果对这个对象有引用, 可能造成NullPointerException 空指针异常。

findbugs7.png

ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD:把实例赋值给一个静态对象,如果多个实例被赋值可能出现数据丢失问题。

findbug8.png

NP_ALWAYS_NULL_EXCEPTION:在异常处理时,调用一个空对象的方法时可能引起空指针异常。

IM_BAD_CHECK_FOR_ODD:奇偶检测逻辑,未考虑负数情况。

WMI_WRONG_MAP_ITERATOR:使用了keySet iterator和Map.get(key)来获取Map值,这种方式效率低,建议使用entrySet的iterator效率更高

OS_OPEN_STREAM:方法可能未关闭stream,方法产生了一个IO流,却未关闭,将会导致文件描绘符的泄漏,建议使用finally block来确保io stream被关闭。

IL_INFINITE_LOOP:明显的无限循环。

扩展:

FindBugs 网站提供了完整的类型清单

Fiter file规则说明

转载地址:http://efavx.baihongyu.com/

你可能感兴趣的文章
js数组去重,合集等操作
查看>>
BPM与Workflow的区别
查看>>
将 SharePoint 开发与其他形式的开发进行比较
查看>>
配置 mybatis的 log4j.properties
查看>>
linux命令chown和chmod什么区别
查看>>
【linux磁盘分区--格式化】fdisk,parted,mkfs.ext3
查看>>
排序算法之快速排序详解
查看>>
AppleScript: Handler
查看>>
ADO.NET的记忆碎片(六)
查看>>
如何注册java程序为windows服务
查看>>
井底飞天
查看>>
PHP excel文件导入至mysql中!
查看>>
Python进阶08 异常处理
查看>>
html5 报表
查看>>
js 操作cookies 方法
查看>>
DataTable转成List集合
查看>>
编程之美 set 1 不要被阶乘吓倒
查看>>
Spring Remoting by HTTP Invoker Example--reference
查看>>
***Redis hash是一个string类型的field和value的映射表.它的添加、删除操作都是O(1)(平均)。hash特别适合用于存储对象...
查看>>
【cocos2d-js官方文档】二十五、Cocos2d-JS v3.0中的单例对象
查看>>