Eclipse插件FindBugs安装使用说明
FindBugs帮助文档
Product name产品名称Confidentiality level密级FindBugs帮助文档内部公开Product version产品版本Total 29 pages 共29页V1.0FindBugs帮助文档(软件工程部)Prepared by拟制邓爱平36829Date日期2008-10-16Reviewed by 审核人Date 日期Reviewed by 审核人Date 日期Authorized by批准Date日期Huawei Technologies Co., Ltd.华为技术有限公司All rights reserved版权所有侵权必究文档版本 1.1 (2006-03-01) 华为技术有限公司1-1文档版本 1.1 (2006-03-01) 华为技术有限公司1-2修订记录日期文档版本产品版本描述作者2008-10-16 1.0 初稿邓爱平36829文档版本 1.1 (2006-03-01) 华为技术有限公司1-3目录(Contents)1 目的和范围................................................................................................................................... 1-61.1 目的 .............................................................................................................................................. 1-61.2 范围 .............................................................................................................................................. 1-62 FindBugs使用 .............................................................................................................................. 2-62.1 FindBugs简介................................................................................................................................ 2-62.1.1 FindBugs能解决的问题......................................................................................................... 2-62.1.2 同类产品介绍 ....................................................................................................................... 2-92.2 如何安装FindBugs ........................................................................................................................ 2-92.2.1 图形界面/命令行................................................................................................................... 2-92.2.2 安装Eclipse插件................................................................................................................... 2-92.3 如何使用FindBugs ...................................................................................................................... 2-122.3.1 在图形界面下使用FindBugs(JDK1.5上进行)...................................................................... 2-122.3.2 在命令行下使用FindBugs .................................................................................................. 2-152.3.3 在Eclipse下使用FindBugs .................................................................................................. 2-172.3.4 通过ant任务脚本使用FindBugs .......................................................................................... 2-202.4 FindBugs的高级功能................................................................................................................... 2-222.4.1 规则配置............................................................................................................................. 2-222.4.2 使用过滤器......................................................................................................................... 2-222.4.3 FindBugs的局限性.............................................................................................................. 2-232.4.4 FindBugs推行细则.............................................................................................................. 2-243 常见问题FAQ及其解答............................................................................................................ 3-243.1 在Eclipse下在更改了检查出的错误后,为什么无法实时刷新检查结果 ...................................... 3-243.2 在Eclipse下使用FindBugs时,如何将发现的问题显示在Problems视图中................................. 3-243.3 为什么Eclipse插件加载不成功.................................................................................................... 3-253.4 如何配置FindBugs的通过准则.................................................................................................... 3-253.5 为什么在图形界面下使用FindBugs时,关联不到源代码............................................................ 3-253.6 文档胶片中说到的FindBugs帮助文档在什么地方....................................................................... 3-263.7 到什么地方获取FindBugs相关资料............................................................................................. 3-263.8 对于不修改的Bug,怎么给出原因说明....................................................................................... 3-263.9 Findbugs占用大量内存,而且运行时间很长,应该如何缩短运行时间.................................... 3-27文档版本 1.1 (2006-03-01) 华为技术有限公司1-43.10 每个工程目录下的.fbprefs 文件有何作用................................................................................. 3-273.11 Bug Explorer窗口的export有何功能 .......................................................................................... 3-283.12 如何了解findbugs提供的每个规则的含义 ................................................................................. 3-284 参考引用..................................................................................................................................... 4-28文档版本 1.1 (2006-03-01) 华为技术有限公司1-51 目的和范围1.1 目的FindBugs 是一个代码静态分析工具,它检查类或者JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题。
findbugs在eclipse中的安装及使用
Findbugs在eclipse中的安装及使用
1Findbugs插件安装与使用
1.1插件安装
1)点击eclipse菜单栏Help->Eclipse Marketplace搜索关键字findbugs,搜索到插件并点击安装即可,如下图:
2)安装完毕后,点击重启eclipse
1.2使用
1)添加findbugs explorer:选择window->show view->other,选择Bug Exploer,点击“ok”
2)选择要检查的项目,选择project->Build project进行编译
3)选择整个项目或者选择指定的包或者类进行findbug:右键,选择Find Bugs->Find Bugs (之前最好先Clear Bug Markers),此时findbugs会遍历指定的包或者类,进行分析,找出代码bug,然后集中显示在find bugs的bugs explorer 中。
4)在Bug Explorer中能看到检查出来的bug,双击bug就可以在编辑窗口自动打开相关代
码文件并连接到代码片段。
1.3Bug说明
找出的bug有3中颜色,黑色的臭虫标志是分类,红色的臭虫表示严重bug发现后必须修改代码,橘黄色的臭虫表示潜在警告性bug 尽量修改。
JAVA静态代码质量分析工具FindBugs介绍
findbugs.xml和messages.xml两个文件
findbugs.xml的编写
对于每一个新的检测器,在 FindBugs.xml 文件中增加一 个 Detector 元素和一个 BugPattern 元素。 Detector 元素指定用于实现检测器的类以及它是快速还是慢速检测 器。speed 属性的可能值有 slow、moderate 和 fast。 BugPattern 元素指定三个属性。 abbrev 属性定义检测 器的缩写。缩写用于标识用命令行客户运行时检测到的缺 陷。可以用同一个缩写将几个相关的检测器组织到一起。.
准备工作 下载到ant和findbugs。并且配置好它们的环境 变量
编写ant脚本(build.xml)
build.xml部分属性参数说明
class 嵌套元素指定要分析的类。这个元素必须 指定一个location属性,location属性的名字为 archive文件(jar,zip等)、目录或者class文件。 可以为一个findbugs元素指定多个class元素。 auxClasspath 可选的嵌套元素,用于指定要分 析的类所引用的类,但是并不对引用的类进行分 析。 sourcePath 可选的嵌套元素,指定Java源代码 的目录。
Hale Waihona Puke 自定义FindBugs检测器
编写自定义的检测器Detector 项目中需要引入FindBugs的jar文件:findBug.jar 自定义的检测器需要继承OpcodeStackDetector 重写其sawOpcode方法。下面用一个简单的自定义 检测器来说明。此检测器是用来查找项目中有没有 system.out和system.error情况出现的。建议编 写的时候可以先查看FindBugs源代码以查找类似于 你要编写的检测器。
eclipse代码缺陷查找插件findbugs的使用
静态分析工具承诺无需开发人员费劲就能找出代码中已有的缺陷。
当然,如果有多年的编写经验,就会知道这些承诺并不是一定能兑现。
尽管如此,好的静态分析工具仍然是工具箱中的无价之宝。
在这个由两部分组成的系列文章的第一部分中,高级软件工程师Chris Grindstaff 分析了FindBugs 如何帮助提高代码质量以及排除隐含的缺陷。
代码质量工具的一个问题是它们容易为开发人员提供大量但并非真正问题的问题——即伪问题(false positives)。
出现伪问题时,开发人员要学会忽略工具的输出或者放弃它。
FindBugs 的设计者David Hovemeyer 和William Pugh 注意到了这个问题,并努力减少他们所报告的伪问题数量。
与其他静态分析工具不同,FindBugs 不注重样式或者格式,它试图只寻找真正的缺陷或者潜在的性能问题。
FindBugs 是什么?FindBugs 是一个静态分析工具,它检查类或者JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题。
有了静态分析工具,就可以在不实际运行程序的情况对软件进行分析。
不是通过分析类文件的形式或结构来确定程序的意图,而是通常使用Visitor 模式(请参阅参考资料)。
图 1 显示了分析一个匿名项目的结果(为防止可怕的犯罪,这里不给出它的名字):在FindBugs的GUI中,需要先选择待扫描的.class文件(FindBugs其实就是对编译后的class 进行扫描,藉以发现一些隐藏的bug。
)。
如果你拥有这些.class档对应的源文件,可把这些.java文件再选上,这样便可以从稍后得出的报告中快捷的定位到出问题的代码上面。
此外,还可以选上工程所使用的library,这样似乎可以帮助FindBugs做一些高阶的检查,藉以发现一些更深层的bug。
选定了以上各项后,便可以开始检测了。
检测的过程可能会花好几分钟,具体视工程的规模而定。
检测完毕可生成一份详细的报告,藉由这份报告,可以发现许多代码中间潜在的bug。
FindBugs使用手册
文件编号:配置项编号:FindBugs使用手册文档版本号V 1.0农信银资金清算中心创新研发部文档修订记录目录1、FindBugs简介 (4)2、FindBugs的检查规则 (4)2.1Correctness(正确性) (4)2.2 Bad practice(不良实践) (5)2.3 Performance(性能) (5)2.4Multithreaded correctness(多线程正确性) (6)2.5 Dodgy(不可靠) (7)3、FindBugs使用 (8)3.1安装FindBugs (8)3.2配置FindBugs (8)3.3使用FindBugs (8)1、FindBugs简介FindBugs是用于java代码检查的一种静态分析工具,它检查类或者JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题。
有了静态分析工具,就可以在不实际运行程序的情况对软件进行分析。
FindBugs专注于找出潜在程序错误,而不是编码风格问题,目的在于提高程序的健壮性。
2、FindBugs的检查规则FindBugs提出了超过200种规则,这些规则可主要分为如下类别:2.1Correctness(正确性)这些问题涉及到可能在某些方面不正确的代码。
如:代码有无限递归,或者读取为写入的字段,这类问题几乎无疑是程序的错误。
例1:使用未初始化的类成员,可能导致NullPointException代码:FindBugs检测结果:例2:不使用方法的返回值代码:FindBugs检测结果:2.2Bad practice(不良实践)这类问题明确违反建议的编程标准。
如:删除异常,或未关闭文件,或未数据库连接资源等。
例3:未关闭打开的文件输出流资源代码:FindBugs检测结果:2.3Performance(性能)这类规则的目的在于检测潜在的性能问题。
如:代码创建了不需要的对象,或者在循环中使用字符串连接而不是使用StringBuffer。
Eclipse 插件 FindBugs 使用手册
Eclipse 插件FindBugs 使用手册前言:本文介绍如何利用Eclipse 插件FindBugs 优化Java 代码。
本插件是本人在对系统进行代码优化的时候,向迟焕祺同事索取并学习使用的,现在把工具的一些使用方法与大家共享,并把FindBugs提供给大家!感谢迟哥提供良好资源供大家学习、使用!问题提出:当我们编写完代码,做完单元测试等各种测试后就提交正式运行,只能由运行的系统来检测我们代码是否有问题了,代码中隐藏的错误在系统运行的过程中被发现后,然后再来进行相应的修改,那么后期修改的代价就相当高了。
解决方法:现在有很多Java 代码分析工具,FindBugs 中开源项目当中的一个,它可以帮你找到代码中隐藏的一些错误,提升你的代码能力与系统安全可靠性。
FindBugs 介绍FindBugs 是一个可以在Java 程序中发现Bugs 的程序。
它是专门用来寻找处于“Bug Patterns”列表中的代码的。
Bug Patterns 指很有可能是错误的代码的实例。
原文:FindBugs is a program to find bugs in Java programs. It looks for instances of "bug patterns" --- code instances that are likely to be errors.使用FindBugs 至少需要JDK1.4.0 以上版本,FindBugs是平台独立的,可以运行于GNU/Linux、Windows、MacOS X 等平台上。
运行FindBugs 至少需要有256 MB 内存,如果你要分析一个很大的项目,那就需要更加多的内存了。
获取FindBugs 最新版本:/projects/findbugs/files/FinBugs 介绍:/manual/Eclipse 插件links 文件夹方式配置:提示:直接的插件配置方式是使用Eclipse 的Update 方式更新,或者把新下载的插件PlugIn 放在原始的Eclipse 目录下去,这种方式会随着插件的增多而导致插件维护工作量的增加。
findbugs 用法
findbugs用法FindBugs是一款由加州大学伯克利分校的Java开发者团队开发的静态代码分析工具,主要用于发现Java代码中的潜在错误和漏洞。
本文将向您介绍FindBugs的基本用法,帮助您更好地利用这款工具提高代码质量。
一、FindBugs简介FindBugs是一款免费的开源工具,它通过分析Java代码的语法、数据流、异常处理等方面,发现潜在的错误和漏洞。
FindBugs可以帮助开发者发现一些不易被人工发现的错误,提高代码质量,减少软件缺陷。
二、安装FindBugs要使用FindBugs,您需要先将其安装到您的系统中。
FindBugs支持Windows、Linux和MacOSX等操作系统。
安装过程相对简单,您可以从FindBugs官方网站下载最新版本的FindBugs,并根据安装指南进行安装。
三、使用FindBugs进行代码分析安装完成后,您可以使用FindBugs对Java代码进行静态分析。
以下是使用FindBugs进行代码分析的基本步骤:1.打开FindBugs分析器界面,将要分析的Java代码文件上传到分析器中。
2.选择要进行静态分析的选项,如是否包含测试代码等。
3.等待分析器进行分析,生成报告。
4.查看分析报告,了解代码中的潜在错误和漏洞。
以下是一些使用FindBugs的常见用法示例:1.查找未使用的变量:FindBugs可以检测到未使用的变量,这可能是由于开发者疏忽或无意中留下的漏洞。
2.查找空指针引用:FindBugs可以检测到可能出现的空指针引用错误,这可能导致程序崩溃或出现不可预期的行为。
3.查找内存泄漏:FindBbugs可以检测到可能的内存泄漏问题,如对象引用未被释放等。
4.查找线程安全问题:FindBugs可以检测到线程安全问题,如并发修改共享数据等。
五、优化FindBugs结果使用FindBugs分析后,您可能会发现一些潜在的问题和漏洞。
对于这些问题和漏洞,您可以采取以下优化措施:1.修复错误:对于发现的错误和漏洞,您应该尽快修复它们,以确保代码的质量和稳定性。
Findbugs安装及使用说明
Findbugs安装及使用说明安装步骤1.打开eclipse2.Help -> Install New Software3.点击Add,弹出Add Site窗口4.在上图对话框里填写如下:∙Name: findbugs∙Location: /eclipse5.点击OK后,选中“FindBugs”前面的复选框,再点击“Next”进入下一步接下来按照窗口提示操作,直至“Finish”完成安装。
6.在新出来的对话框中,选中findbugs(注意: 此时如果装了Myeclipse插件, 这里可能会报错. 请先在eclipse的links文件夹下面将Myeclipse的link文件移除, 然后等findbugs装完之后, 再将Myeclipse的link文件放进来)7.点击next8.选中”I accept the terms in the license agreement”9.点击Next,然后点击Finish10.最后Install ,Yes (重启eclipse),findbugs安装完成注:不同版本的eclipse,安装时会发现界面(本说明是依据V3.5.2版本进行的),菜单的显示形式可能不同,请灵活应对。
卸载步骤如果您所使用的eclipse版本已经集成了findbugs,建议您删除之后按上述操作步骤进行重新安装,这样确保您安装的是最新版本,据说新版本功能更加强大,能帮助您发现更多更深层次的bug哦~1.打开eclipse2.Help -> Install New Software3.点击’Available Software Sites’4.在弹出的Preferences窗口中选中已存在的’findbugs’,点击Remove,关闭eclipse,5.删除eclipse根目录下原有的与“findbugs”相关内容分别进入plugins和features文件夹下,搜索“findbugs”并删除与“findbugs”相关的文件夹;进入configuration\org.eclipse.equinox.simpleconfigurator,删除“”文件中与“findbugs”相关的内容然后重新启动eclipse。
FindBugs安装及使用说明
FindBug安装及使用说明目录1.简介 (3)1.1说明 (3)1.2环境要求 (3)1.3注意事项 (3)2.FINDBUGS安装 (3)2.1在线安装 (3)2.2离线安装 (9)3.FINDBUGS使用 (10)3.1F IND B UGS操作 (10)3.2F IND B UGS常见故障模式 (11)3.2.1NP_NULL_ON_SOME_PATH: Possible null pointer dereference (11)3.2.2DLS_DEAD_LOCAL_STORE: Dead store to local variable (11)3.2.3BX_BOXING_IMMEDIATELY_UNBOXED: Primitive value is boxed and then immediately unboxed .. 123.2.4DM_NUMBER_CTOR: Method invokes inefficient Number constructor; use static valueOf instead 123.2.5Cloneable Not Implemented Correctly (CN) (12)3.2.6OBL_UNSATISFIED_OBLIGATION: Method may fail to clean up stream or resource (12)3.2.7Double Checked Locking (DC) (13)3.2.8Dropped Exception (DE) (14)3.2.9Suspicious Equals Comparison (EC) (14)3.2.10Bad Covariant Definition of Equals (Eq) (15)3.2.11Equal Objects Must Have Equal Hashcodes (HE) (15)3.2.12Static Field Modifiable By Untrusted Code (MS) (15)3.2.13Null Pointer Dereference (NP), Redundant Comparison to Null (RCN) (16)3.2.14Non-Short-Circuit Boolean Operator (NS) (17)3.2.15Open Stream (17)3.2.16Read Return Should Be Checked (RR) (17)3.2.17Return Value Should Be Checked (RV) (18)3.2.18Non-serializable Serializable class (SE) (18)3.2.19Uninitialized Read In Constructor (UR) (18)3.2.20Unconditional Wait (UW) (19)3.2.21Wait Not In Loop (Wa) (19)1.简介1.1说明FindBugs 是一个java bytecode静态分析工具,它可以帮助java工程师提高代码质量以及排除隐含的缺陷。
findBugs_安装使用说明
findBugs 安裝使用說明一.下載安裝1.首先從以下鏈接下載findBugs/projects/findbugs/files/findbugs%2 0eclipse%20plugin/1.3.9/edu.umd.cs.findbugs.plugin.eclip se_1.3.9.20090821.zip/download注意:該頁面即為下載頁面,無需跳轉至其他頁面,若長時間無反應,可刷新后再試成功時頁面上方會倒數5秒,而後進行下載,如下圖:2.下載完以後將其解壓,得到edu.umd.cs.findbugs.plugin.eclipse_1.3.9.20090821文件夾,打開兩層文件夾后如下圖所示3.將解壓後的edu.umd.cs.findbugs.plugin.eclipse_1.3.9.20090821文件夾複製到MyEclipse 9.0安裝路徑下的\Genuitec\Common\plugins中如下圖4.找到MyEclipse 9.0安裝路徑下的Genuitec\MyEclipse-9.0M1\configuration\org.eclipse.equinox.simpleconfigurator,用記事本打開裏面的,在最後一行添加上:edu.umd.cs.findbugs.plugin.eclipse,1.3.9.20090821, file:/X:/……/Genuitec/Common/plugins/edu.umd.cs.findbugs.plugin.eclipse_1.3.9.20090821/edu.umd.cs.findbugs.plugin.eclipse_1.3.9.20090821/,4,false(注:X:/……/ 为MyEclipse 9.0安裝路徑,例如我的配置是edu.umd.cs.findbugs.plugin.eclipse,1.3.9.20090821, file:/D:/Program%20Files/Genuitec/Common/plugin s/edu.umd.cs.findbugs.plugin.eclipse_1.3.9.200908 21/edu.umd.cs.findbugs.plugin.eclipse_1.3.9.20090 821/,4,false)5.重啟MyEclipse,選擇任意的項目或文件,單擊右鍵,若出現findBugs選項,表明findBugs插件安裝成功,如下圖二.findBugs插件使用說明1.選中項目或文件,右鍵Find Bugs Find Bugs,等待運行結束2.通過Bug Explorer可以查看選中項目或文件下的缺陷,並且在對應文件下的缺陷處對應行會有一個小蟲的標記3可以通過右上角的開發模式切換功能切換至FindBugs模式4.在FindBugs模式中,左邊為Bug Explorer,用於查看缺陷個數以及缺陷原因,右上為文件內容,缺陷處對應行會有一個小蟲的標記,右下則是缺陷的屬性6.點擊Bug Explorer中的任一條缺陷,將會在右下的Properties中顯示出缺陷的狀態與屬性,如下圖第一個頁簽為缺陷的產生原因第二個頁簽為缺陷描述及解釋第三個頁簽是該缺陷的一系列基本屬性。
myeclipse,eclipse插件之FindBugs_静态分析工具
myeclipse 、eclipse插件之FindBugs (静态分析工具)
作者:轻描淡写
介绍:
FindBugs概念/view/2367937.htm
FindBugs主页/
FindBugs手册/manual/index.html
作者主页:
为什么要使用FindBugs
FindBugs 是一个静态分析工具,它检查类或者JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题。
本文只介绍findbugs在myeclipse eclipse中的用法
findbugs2.0.1
安装:
1.下载插件进入下载页面/downloads.html
选择
进入/projects/findbugs/files/
选择
点击Download findbugs-2.0.1-rc2.zip (8.3 MB)
2.,.解压下载文件edu.umd.cs.findbugs.plugin.eclipse_2.0.0.20111220.zip ,并放入plugins 插件文件夹(进入myeclipse 、eclipse目录找到plugins文件夹)
3.重新打开myeclipse 、eclipse就OK!!
4.检查是否安装成功
选中某个项目,右键,在export下有FindBugs 点击Find Bugs 开始分析ing!!可能分析需要一段时间还是去喝杯咖啡吧!!!
分析完毕弹出如下对话框请点YES !!!
进入Bug Explorer 界面、点击黑色虫子在点击内部的对应的类即可看到代码中潜在的问题就会标识出来了(黄色虫子部分)
鼠标放在小虫上的话,会给出原因!!!!。
FindBugs的使用
FindBugs的使用1 FindBugs简介FindBugs是一个静态分析工具,它检查类或者JAR文件,将字节码与一组缺陷模式进行对比以发现可能的问题。
有了静态分析工具,就可以在不实际运行程序的情况对软件进行分析。
FindBugs有几种,有的为单机程序版,有的为与Eclipse 相结合的插件版,等等。
本文介绍的就是Java程序员最喜欢的插件版。
2 FindBugs的安装在网上下载FindBugs插件,解压后,直接将解压后的文件(edu.umd.cs.findbugs.plugin.eclipse_3.0.1.20150306-5afe4d1)放到eclipse的dropins目录,然后重启eclipse即可。
右键点击项目,看到Find Bugs出现就可以了。
3 FindBugs在Eclipse的使用在需要静态检查的项目上点击右键,按照上图所示,点击Find Bugs,等待静态检查进度完成。
小瓢虫所在位置即为问题代码所在位置。
检测出的bugs可以到《详解FindBugs的各项检测器》中查找对应原因。
4 FindBugs可以检测的内容FindBugs提供了35个检测器来检测字节码中可能的缺陷。
其可以做的事情主要有:4.1 找出hash equals不匹配找与equals()和hashCode()的实现相关的几个问题。
这两个方法非常重要,因为几乎所有基于集合的类---List、Map、Set等都调用它们。
一般来说,这个检测器寻找两种不同类型的问题:①当一个类重写对象的equals()方法,但是没有重写它的hashCode方法,或者相反的情况时。
②定义一个co-variant版本的equals()或compareTo()方法。
例如,Bob类定义其equals()方法为布尔equals(Bob),它覆盖了对象中定义的equals()方法。
因为Java代码在编译时解析重载方法的方式,在运行时使用的几乎总是在对象中定义的这个版本的方法,而不是在Bob中定义的那一个(除非显式将equals()方法的参数强制转换为Bob类型)。
用Eclipse自带插件创建自定义findbugs检测器
用Eclipse自带插件创建findbugs的检测器1.准备工作1.1.为Eclipse安装插件插件1:ByteCode下载地址:http://andrei.gmxhome.de/eclipse/用法:在Eclipse菜单栏上单击windows->show view->other…->Java->Bytecode即可打开Bytecode窗口,方便查看当前文件的字节码,效果如图1所示。
图1插件2:Findbugs下载地址:/eclipse用法:在Eclipse菜单栏上单击windows->show view->other…->Findbugs->Bug Explorer即可打开Bug Explorer窗口,进入Findbugs浏览状态,效果如图2所示。
图21.2.以下操作需要用的软件(可选)为了操作方便,建议使用winRAR用来打开jar文件;使用Notepad++打开xml 文件2.创建自己的Findbugs检测器2.1.编写自定义的检测器Detector项目中需要引入Findbugs的jar文件:findbugs.jar自定义的检测器需要继承OpcodeStackDetector,重写其sawOpcode方法。
下面这个检查器Detector用来查找项目中有没有System.out和System.error情况出现。
package edu.umd.cs.findbugs.detect;import org.apache.bcel.classfile.Code;import edu.umd.cs.findbugs.BugInstance;import edu.umd.cs.findbugs.BugReporter;import edu.umd.cs.findbugs.bcel.OpcodeStackDetector;/*** @author判断System.out和System.error这种情况*/public class ForbiddenSystemOutClass extends OpcodeStackDetector { BugReporter bugReporter;public ForbiddenSystemOutClass(BugReporter bugReporter) {this.bugReporter = bugReporter;}/*** visit方法,在每次进入字节码方法的时候调用在每次进入新方法的时候清空标志位*/@Overridepublic void visit(Code obj) {super.visit(obj);}/*** 每扫描一条字节码就会进入sawOpcode方法** @param seen 字节码的枚举值*/@Overridepublic void sawOpcode(int seen) {if (seen == GETSTATIC) {if (getClassConstantOperand().equals("java/lang/System")// get class mapping&& (getNameConstantOperand().equals("out") // get static field mapping|| getNameConstantOperand().equals("err"))) {BugInstance bug = new BugInstance(this, "CHECK_SYSTEMCLASS",NORMAL_PRIORITY).addClassAndMethod(this).addSourceLine(this, getPC());bug.addInt(getPC());bugReporter.reportBug(bug);}}}}文件1:自定义检测器ForbiddenSystemOutClass.java接下来找到Eclipse编译的ForbiddenSystemOutClass.class文件,一般在项目的lib目录里可以找到。
FindBugs_简明教程
FindBugs 简明教程前言:本文重点在FindBugs的入门使用相关的介绍内容请看本文后面的推荐链接FindBugs的使用入门下面将介绍2种方式利用FindBugs去自检代码第一种适用于Eclipse下开发的应用程序第二种适用于Framework层的局部代码准备方面a.FingBugs Eclipse plug-in/eclipseb.FindBugs tools with Swing Interface/findbugs/findbugs-1.3.9.zip?download 1.使用步骤2.1Eclipse下安装FindBugs plug-in1)点击Install New Software 进行安装2)点击Add之后在弹出的地址框中填入FindBugs Plug-in的地址3)将FindBugs Feature勾选并点击Next4)猛点Next5)勾选accept 并点击Finish6)Waiting…7)点击OK8)安装成功后提示重启Eclipse,点击Restart Now2.2Eclipse下使用FindBugs, 在此使用ApiDemo为例1)右键点击工程,点击FindBugs2)FindBugs分析完成后自动跳转到Bug Explorer. 点击一个Bug自动定位到代码行,然后点击代码行最左端的”Bugs”,在Properties中显示该Bug的详细情况建议修改的方式等等(自动生成的R文件相关的可略过)3)点击Windows->Preferences->Java->FindBugs 可配置FindBugs自检规则4)自检完成后可将FindBugs结果以xml的形式保存下来作为凭证2.3利用FindBugs tool自检(适用于局部代码自检例如framework修改的代码在此举例)1)下载FindBugstools with Swing Interface 并解压点进bin下的findbugs.bat2) 将待检代码文件及对应的class文件准备好并导入并点击完成这里拿AbsListView.java举例将out\target\common\obj\JAVA_LIBRARIES\framework_intermediates\classes.jar 中有关AbsListView的class都拿出来包括内部类3)根据分析结果定位到代码进行修改下面有相关的Bug行数及方法名及变量名2.4运用Findbugs 命令行的方式检查指定的类或者jar命令行常用命令:$FINDBUGS_HOME $/bin/findbugs -textui [options…] <Jar or class file path>Options:-low (Report all bugs)-medium (Report medium and high priority bug. This is the default setting.)-high (Report only high priority bugs.)-xml (Produce the bug reports as XML)-help (displays help information for the FindBugs command line user interface)利用基本基本命令去检查会在命令行中打印每个Bug的信息以行为单位使用了-xml 参数后打印的是xml报告可以将其导入Fingbugs plug-in或者Swing GUI中查看使用命令行的时候为了方便查看及保存可以把结果重定向到文本中FindBugs推荐资料IBM-FindBugs详细说明/developerworks/cn/java/j-findbug1//developerworks/cn/java/j-findbug2/FindBugs官网/Baidu百科FindBugs/view/2367937.htm。
findbugs 用法
findbugs 用法摘要:1.Findbugs 简介2.Findbugs 的基本用法3.Findbugs 的高级用法4.Findbugs 的优点和局限性正文:Findbugs 是一款流行的Java 代码审计工具,它可以帮助开发人员找到代码中的潜在问题和安全漏洞。
下面我们将详细介绍Findbugs 的基本用法和高级用法。
一、Findbugs 基本用法1.安装Findbugs首先,需要在电脑上安装Findbugs。
可以访问Findbugs 官网下载最新版本,然后按照提示进行安装。
2.编写Java 代码在使用Findbugs 进行代码审计之前,需要编写一段Java 代码。
这段代码可以是现有的项目代码,也可以是新编写的代码。
3.运行Findbugs在安装完Findbugs 后,可以通过命令行工具运行它。
在命令行中输入以下命令:```findbugs -x <path_to_your_java_code>```其中,`<path_to_your_java_code>`表示你的Java 代码所在的路径。
4.查看Findbugs 输出结果Findbugs 运行后,会在命令行中输出审计结果。
审计结果包括找到的潜在问题和安全漏洞的详细信息。
二、Findbugs 高级用法1.配置FindbugsFindbugs 提供了丰富的配置选项,可以根据实际需求进行配置。
以下是一些常用的配置选项:- `-X 不堪设想`:启用Findbugs 的高级功能。
- `-Xmultithread`:启用多线程审计。
- `-Xnoescape`:关闭Findbugs 的ESCAPE 机制。
2.编写自定义规则Findbugs 支持编写自定义规则,可以根据实际需求编写适合自己的规则。
规则文件需要以`.find`为扩展名,放在`findbugs-rules`目录下。
3.使用插件Findbugs 支持插件,可以通过插件扩展Findbugs 的功能。
FindBugs在Eclipse中的应用
FindBugs在Eclipse中的应用本文介绍如何利用Eclipse插件FindBugs在Eclipse中的使用。
Eclipse是目前非常流行的开发平台,开放扩展的架构让很多程序员找到了自己个性化的工作环境。
问题提出当我们编写完代码,做完单元测试等各种测试后就提交正式运行,只能由运行的系统来检测我们代码是否有问题了,代码中隐藏的错误在系统运行的过程中被发现后,然后再来进行相应的修改,那么后期修改的代价就相当高了。
解决方法现在有很多Java代码分析工具,findbugs是一个开源的eclipse 代码检查工具;它可以简单高效全面地帮助我们发现程序代码中存在的bug,bad smell,以及潜在隐患。
针对各种问题,它并且提供了简单的修改意见供我们重构时进行参考;通过使用它,可以一定程度上降低我们code review的工作量,并且会提高review效率。
通过findbugs找到bug,再由我们自己重构代码,可以培养我们的编码意识及水平,形成好的习惯提高开发编码能力。
安装JDK:1.5.0 从上去下载安装Eclipse:3.1.1 从 上去下载解压FindBugs:0.9.4 从/官方的文档:/manual/Eclipse plugin for FindBugs version 0.0.17:/downloads.html 下载插件安装网上有好多方法,不过我试验了,都不成功,我安装成功的方法是直接发解压后的文件夹考到Eclipse plugin目录下,然后重启Eclipse,可以按以下步骤看到安装是否成功:help→about eclipse SDK→plugin-details能看到下图红线部分说明安装成功。
本人极力推荐以下链接的文章,很好很值得一看。
/view/f5c78eeb172ded630b1cb605.html打不开也可在在百度文库里面搜Eclipse 插件安装为了以后观察方便先建立添加findbugs explorer(eclipse 左下角)→→Eclipse里面使用findbug:创建简单测试例子可以看到黄色虫子。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
FindBugs 安装使用
FindBugs是个专门用来发现Java代码中的Bug的Eclipse小插件,与Eclipse无缝结合,可以实现敲入代码、保存文件、编译时即时反馈给用户Bug信息,比Eclipse自带的Java Bug 管理功能要强。
FindBugs一共有三个版本,除过Eclipse插件板本外,还提供一个独立版本的Java程序(基于SWing)和一个Ant Task版本;下面介绍Eclipse的插件版。
一、安装
打开MyEclipse 的help -> SoftWave Updates -> Find and Install
如图:
点击next
在下图中,点击New Remote site,在弹出的窗口中输入Name:findBugs,
URL:/eclipse
点击ok
然后按下图操作。
点击完成
最后按提示安装。
二、配置
在工程栏选中一个项目,按Alt + Enter 键
三、使用
1、对项目使用findBugs
选中项目,如下图操作:
点击Find Bugs后,findBugs会查找整个项目的bug。
之后,如图操作:
在弹出的窗口,如图操作:
最后,窗口会按bug的高低级别显示程序bug:
2、在编写代码时使用findBugs
编写代码时,findBugs会查找bug,并给有bug行一个爬虫logo标示,如下图:
点击爬虫图标会显示具体的bug,如下图:
Findbugs缺陷描述:
Findbugs是一个静态分析工具,它检查类或者JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题。
Findbugs自带检测器,其中有60余种Bad practice,80余种Correctness,1种Internationalization,12种Malicious code vulnerability,27种Multithreaded correctness,23种Performance,43种Dodgy。
Bad practice 坏的实践
一些不好的实践,下面列举几个:
HE:类定义了equals(),却没有hashCode();或类定义了equals(),却使用
Object.hashCode();或类定义了hashCode(),却没有equals();或类定义了hashCode(),却使用Object.equals();类继承了equals(),却使用Object.hashCode()。
SQL:Statement 的execute方法调用了非常量的字符串;或Prepared Statement是由一个非常量的字符串产生。
DE:方法终止或不处理异常,一般情况下,异常应该被处理或报告,或被方法抛出。
Correctness 一般的正确性问题
可能导致错误的代码,下面列举几个:
NP:空指针被引用;在方法的异常路径里,空指针被引用;方法没有检查参数是否null;null值产生并被引用;null值产生并在方法的异常路径被引用;传给方法一个声明为@NonNull的null参数;方法的返回值声明为@NonNull实际是null。
Nm:类定义了hashcode()方法,但实际上并未覆盖父类Object的hashCode();类定义了tostring()方法,但实际上并未覆盖父类Object的toString();很明显的方法和构造器混淆;方法名容易混淆。
SQL:方法尝试访问一个Prepared Statement的0索引;方法尝试访问一个ResultSet的0索引。
UwF:所有的write都把属性置成null,这样所有的读取都是null,这样这个属性是否有必要存在;或属性从没有被write。
Internationalization 国际化
当对字符串使用upper或lowercase方法,如果是国际的字符串,可能会不恰当的转换。
Malicious code vulnerability 可能受到的恶意攻击
如果代码公开,可能受到恶意攻击的代码,下面列举几个:
FI:一个类的finalize()应该是protected,而不是public的。
MS:属性是可变的数组;属性是可变的Hashtable;属性应该是package protected的。
Multithreaded correctness 多线程的正确性
多线程编程时,可能导致错误的代码,下面列举几个:
ESync:空的同步块,很难被正确使用。
MWN:错误使用notify(),可能导致IllegalMonitorStateException异常;或错误的
使用wait()。
No:使用notify()而不是notifyAll(),只是唤醒一个线程而不是所有等待的线程。
SC:构造器调用了Thread.start(),当该类被继承可能会导致错误。
Performance 性能问题
可能导致性能不佳的代码,下面列举几个:
DM:方法调用了低效的Boolean的构造器,而应该用Boolean.valueOf(…);用类似
Integer.toString(1) 代替new Integer(1).toString();方法调用了低效的float的构造器,应该用静态的valueOf方法。
SIC:如果一个内部类想在更广泛的地方被引用,它应该声明为static。
SS:如果一个实例属性不被读取,考虑声明为static。
UrF:如果一个属性从没有被read,考虑从类中去掉。
UuF:如果一个属性从没有被使用,考虑从类中去掉。
Dodgy 危险的
具有潜在危险的代码,可能运行期产生错误,下面列举几个:
CI:类声明为final但声明了protected的属性。
DLS:对一个本地变量赋值,但却没有读取该本地变量;本地变量赋值成null,却没有读取该本地变量。
ICAST:整型数字相乘结果转化为长整型数字,应该将整型先转化为长整型数字再相乘。
INT:没必要的整型数字比较,如X <= Integer.MAX_VALUE。
NP:对readline()的直接引用,而没有判断是否null;对方法调用的直接引用,而方法可能返回null。
REC:直接捕获Exception,而实际上可能是RuntimeException。
ST:从实例方法里直接修改类变量,即static属性。
更多的描述请见:/bugDescriptions.html。