findbugs(Java静态代码分析工具)
v3.0.1 官方版- 软件大小:8.8 MB
- 更新日期:2019-09-19 18:14
- 软件语言:简体中文
- 软件类别:编程工具
- 软件授权:免费版
- 软件官网:待审核
- 适用平台:WinXP, Win7, Win8, Win10, WinAll
- 软件厂商:
软件介绍 人气软件 下载地址
findbugs是一款功能强大的开源java静态代码分析工具,软件能够使您能够扫描Java程序中的错误并查看有关其含义和可能的修复的详细说明,该软件通过检测几乎任何可能导致功能问题的错误,极大地改进了您的程序。此外,由于其数据库中存在大量错误描述,还会向您显示有关检测到的错误的详细信息,甚至还有修复错误的方法。在使用上,软件具备了极为简单的工作流程,用户通过创建项目、运行分析、浏览结果、修改保存即可快速实现,有需要的用户赶紧下载吧!
软件功能
虽然用Java编写的程序几乎与任何平台都兼容,但对于它们可能包含的任何错误都是相同的。
由于创建无错误的代码非常困难,特别是对于需要处理大量变量和各种平台相关函数的大型应用程序,在编写程序时使用专用调试器来分析程序要容易得多。
查看按严重性因素排序的检测到的错误
FindBugs是一个用Java编写的小而强大的应用程序,可以扫描和检测几乎任何类型的bug到其他Java程序中。为了实现这一点,该实用程序扫描JAR,ZIP或WAR文件中的每个类,并使用静态分析来检测可能导致其在执行期间行为不正确的代码错误。
所有发现的错误都根据其类别进行分组和显示,以便为您提供更直观的工作环境。根据它们是否被视为不良实践,实验性,恶意或它们导致性能问题,将错误传播到文件夹和子文件夹中。
使用自定义筛选器手动对错误进行分组
除了他们的类别,代码问题也可以通过各种其他因素来排序,例如排名和日期。FindBugs让你可以根据它们的“可怕”程度对它们进行排序,从“麻烦”到“最恐怖”。尽管采用了幽默的方法,但该功能功能齐全,它允许您根据严重性因素处理错误。
也可以在应用程序内手动创建自定义过滤器,以便在短时间内找到特定的错误并排除所有不相关的错误,以获得更好的可见性。此外,通过使用云插件,您可以为每个代码指定各种属性,例如“大部分无害”,“必须修复”或“需要进一步研究”。
软件特色
支持Java 8(作为运行时和目标平台)。
FindBugs需要最低Java 7作为运行时环境
FindBugs现在使用ASM 5,这意味着必须升级一些基于FindBugs 2.x / ASM 3的第三方探测器。
“源”过滤器,可用于过滤掉从其他语言生成的类。
在GUI中添加将当前可查看/已过滤的错误保存到HTML输出的功能。
当数据流没有终止时,请确保我们继续进行分析。
类型限定符的调整分析,现在给出警告,其中计算值用于需要具有严格类型限定符的值的位置。
各种重新分类和优先级调整
为各种错误报告添加了更多错误注释,这为理解错误报告提供了更多上下文。
使用说明
使用FindBugs图形用户界面(GUI)
1.创建项目
使用findbugs命令 启动FindBugs后,选择File → New Project 菜单项。您将看到一个如下所示的对话框:
使用“要分析的类路径”旁边的“添加”按钮选择Java归档文件(zip,jar,ear或war文件)或包含java类的目录以分析错误。您可以添加多个存档/目录。
您还可以添加包含要分析的Java归档的源代码的源目录。这将使 FindBugs能够突出显示包含可能错误的源代码。您添加的源目录应该是Java包层次结构的根。例如,如果您的应用程序包含在 org.foobar.myapp包中,则应将目录的父目录添加org到项目的源目录列表中。
另一个可选步骤是添加其他Jar文件或目录作为“辅助类路径位置”条目。如果要分析的归档和目录引用了未包含在分析的归档/目录中且不在标准运行时类路径中的其他类,则应执行此操作。FindBugs中的一些错误模式检测器使用类层次结构信息,因此如果FindBugs执行其分析的整个类层次结构可用,您将获得更准确的结果。
2.运行分析
添加完所有存档,目录和源目录后,单击“分析”按钮分析Jar文件中包含的类。请注意,对于较旧计算机上的非常大的程序,这可能需要相当长的时间(数十分钟)。最近具有充足内存的计算机通常能够在几分钟内分析大型程序。
3.浏览结果
分析完成后,您将看到如下屏幕:
窗口的左上方窗格显示了错误树; 这是分析的Jar文件中检测到的所有潜在错误的分层表示。
当您在顶部窗格中选择特定的错误实例时,您将在底部窗格的“详细信息”选项卡中看到该错误的描述。此外,如果源可用,右上角的源代码窗格将显示潜在错误发生的程序源代码。在上面的示例中,错误是未关闭的流对象。源代码窗口突出显示创建流对象的行。
您可以向bug实例添加文本注释。为此,请在分层视图正下方的文本框中键入它们。您可以键入要记录的任何信息。加载并保存错误结果文件时,将保留注释。
4.保存和开放
您可以使用文件 → 另存为... 菜单选项来保存您的工作。要保存您的工作,包括您指定的jar文件列表和所有错误结果,请从“另存为...”对话框的下拉列表中选择“FindBugs分析结果(.xml)”。还可以选择仅保存jar文件列表(“FindBugs项目文件(.fbp)”)或仅保存结果(“FindBugs分析文件(.fba)”)。可以使用文件 → 打开... 菜单选项加载保存的文件 。
使用FindBugs ™Eclipse插件
要使用Eclipse 的FindBugs插件,您需要Eclipse 3.3或更高版本以及JRE / JDK 1.5或更高版本。
1、使用插件
首先,在Package Explorer中右键单击Java项目,然后选择标记为“Find Bugs”的选项。 FindBugs将运行,问题标记(显示在源窗口中,也显示在Eclipse Problems视图中)将指向代码中已被识别为错误模式的潜在实例的位置。
您还可以在现有的Java档案(jar,ear,zip,war等)上运行FindBugs。只需创建一个空Java项目并将存档附加到项目类路径。有了这个,您现在可以在Package Explorer中右键单击存档节点,然后选择标记为“Find Bugs”的选项。如果您另外配置二进制文件的源代码位置, FindBugs还会将生成的警告链接到正确的源文件。
您可以通过打开Java项目的“属性”对话框并选择“Findbugs”属性页来自定义FindBugs的运行方式。您可以选择的选项包括:
启用或禁用“自动运行FindBugs”复选框。启用后,每次修改项目中的Java类时,FindBugs都会运行。
选择最低警告优先级和启用的错误类别。这些选项将选择显示哪些警告。例如,如果选择“中”警告优先级,则仅显示中等和高优先级警告。同样,如果取消选中“样式”复选框,则不会显示“样式”类别中的警告。
选择探测器。该表允许您选择要为项目启用的检测器。
2、扩展Eclipse插件(自2.0.0起)
Eclipse插件支持自定义FindBugs检测器的贡献( 有关更多信息,另请参阅 AddingDetectors.txt)。有两种方法可以为Eclipse提供自定义插件:
可以通过Window → Preferences → Java → FindBugs → Misc配置 现有的标准FindBugs检测器包 。设置 → 自定义检测器。只需指定任何其他插件库的位置即可。
该解决方案的好处是,现有的探测器包可以“按原样”使用,并且您可以快速验证第三方探测器的质量。缺点是您必须在每个新的Eclipse工作区中应用此设置,并且不能在团队成员之间共享此设置。
可以通过标准Eclipse扩展机制提供自定义检测器。
请查看 findBugsEclipsePlugin / schema / detectorPlugins.exsd 扩展点的文档, 了解如何更新plugin.xml。现有的FindBugs探测器插件可以轻松“扩展”为功能齐全的FindBugs和Eclipse探测器插件。通常,您只需要将META-INF / MANIFEST.MF和plugin.xml添加到jar并更新构建脚本,以便在构建期间不覆盖MANIFEST.MF。
此解决方案的好处是,对于给定(共享)Eclipse安装,每个团队成员具有完全相同的检测器集,并且不再需要配置任何东西。(非常小的)前提是你必须将现有的探测器包转换为有效的Eclipse插件。您甚至可以为第三方检测器包执行此操作。另一个主要的区别是能够在运行时使用所需的第三方库扩展默认的FindBugs类路径( 有关更多信息,请参阅 AddingDetectors.txt)。
3、故障排除
本节列出了插件的常见问题以及(如果知道)如何解决它们。
如果在Eclipse中启动FindBugs分析后看到OutOfMemory错误对话框,请增加JVM可用内存:更改eclipse.ini并将以下行添加到文件末尾:
-vmargs
-Xmx1000m
重要提示:以“-vmargs”行开头的配置参数必须是eclipse.ini文件中的最后一行,并且每行只允许一个参数!
如果您没有看到任何FindBugs问题标记(在源窗口或问题视图中),则可能需要更改“问题视图”过滤器设置。
过滤文件
1.过滤文件简介
从概念上讲,过滤器根据一组条件匹配错误实例。通过定义过滤器,您可以选择bug实例进行特殊处理; 例如,在报告中排除或包含它们。
过滤器文件是具有顶级元素的XML文档,该FindBugsFilter元素具有一些Match元素作为子元素。每个Match 元素表示一个谓词,该谓词应用于生成的错误实例。通常,将使用过滤器来排除错误实例。例如:
$ findbugs -textui -exclude myExcludeFilter.xml myApp.jar
但是,也可以使用过滤器来选择bug实例来专门报告:
$ findbugs -textui -include myIncludeFilter.xml myApp.jar
Match元素包含子元素,它们是谓词的组合。换句话说,每个孩子必须是真实的,因为谓词才是真的。
2.匹配条款的类型
此元素指定要匹配的特定错误模式。该pattern属性是以逗号分隔的错误模式类型列表。您可以通过查看-xml 输出选项( 元素的type属性BugInstance)或错误描述文档生成的输出来查找特定警告的错误模式类型。
要进行更粗粒度的匹配,请使用code属性。它需要以逗号分隔的bug缩写列表。对于大多数粗粒匹配使用 categoryattriute,即需要bug目录名称的逗号分隔的列表: CORRECTNESS,MT_CORRECTNESS, BAD_PRACTICICE,PERFORMANCE,STYLE。
如果在同一元素上指定了上述多个属性,则将 匹配与指定模式名称或abreviations或类别之一匹配的所有错误模式。
作为向后兼容的措施,并且 元件可以被用来代替 元素。其中每个都使用一个 name属性来指定接受的值列表。在将来的版本中可能会删除对这些元素的支持。
此元素匹配具有特定错误信心的警告。该value属性应为整数值:1表示高置信度警告,2表示匹配正常置信度警告,3表示匹配低置信度警告。在2.0.0版本中替换了。
同样,存在向后兼容性。
此元素匹配具有特定错误等级的警告。该value属性应该是1到20之间的整数值,其中1到4是最可怕的,5到9个可怕,10到14个麻烦,以及15到20个关注错误。
此元素匹配与使用nameattribute 指定的包中的类关联的警告。不包括嵌套包(沿着Java import语句)。但是,使用正则表达式名称匹配可以轻松实现匹配多个包。
此元素匹配与特定类关联的警告。该 name属性用于指定类名的精确或正则表达式匹配模式。该role属性是类角色。
作为向后兼容性度量,您可以使用元素class上的属性Match来指定正确的类名称或classregex属性,以指定与类名称匹配的正则表达式,而不是此类型 的元素。
如果Match元素既不包含Class元素也不包含class/ classregex属性,则谓词将应用于所有类。这样的谓词可能会匹配比您想要的更多的bug实例,除非使用适当的方法或字段谓词进一步细化。
此元素匹配与特定源文件关联的警告。该 name属性用于指定源文件名的精确或正则表达式匹配模式。
此元素指定方法。的name用于指定对方法名的确切或正则表达式匹配的图案。该params属性是以逗号分隔的方法参数类型列表。该returns属性是方法的返回类型。该role属性是方法角色。在params和中returns,类名必须是完全限定的。(例如,“java.lang.String”而不仅仅是“String”。)如果指定了后一个属性之一,则创建方法签名需要另一个属性。请注意,您可以提供两种name属性或者params 与returns属性或他们三个。这样您就可以提供各种基于名称和签名的匹配。
此元素指定一个字段。该name属性用于指定字段名称的精确或正则表达式匹配模式。您还可以根据其签名 - 使用type属性筛选字段以指定字段的完全限定类型。您可以指定eiter或这两个属性,以便执行基于名称/签名的匹配。该role属性是字段角色。
此元素指定局部变量。该name属性用于指定局部变量名称的精确或正则表达式匹配模式。局部变量是方法中定义的变量。
该元素将Match子句组合为析取。即,您可以Method在Or子句中放置两个 元素以匹配任一方法。
此元素组合Match了必须评估为true的子句。即,您可以在子句中放置 Bug和Confidence元素,And以便仅在给定的置信度下匹配特定的错误。
这个元素颠倒了包含的孩子Match。即,您可以Bug在Not子句中放置一个 元素,以匹配除了给定的一个错误。
3. Java元素名称匹配
如果name属性Class,Source, Method或Field用〜字符的属性内容的其余部分被解释为是对有问题的Java元素的名称相匹配的Java正则表达式开始。
请注意,模式与整个元素名称匹配,因此。*子句需要在模式开始和/或结束时使用以执行子字符串匹配。
请参阅java.util.regex.Pattern 模式语法的文档。
常见问题
FindBugs内存不足,或者需要很长时间才能完成?
通常,FindBugs需要大量内存和相对较快的CPU。对于大型应用程序,可能需要1024M或更多的堆空间。默认情况下,FindBugs分配768M的堆空间。您可以使用选项增加此选项,其中n是要分配的堆空间的兆字节数。
什么是“辅助类路径”?我为什么要指定它?
有关Java类的许多重要事实都需要有关它引用的类的信息。例如:
该类继承的其他类和接口
外部类和接口中的方法可以抛出哪些异常
“辅助类路径”是一个Jar文件,目录和类文件的列表,其中包含您希望FindBugs分析的代码使用的类,但FindBugs本身不应该对它们进行分析。
如果FindBugs没有关于引用类的完整信息,则它将无法生成尽可能准确的结果。例如,拥有一个完整的引用类存储库允许FindBugs修剪控制流信息,以便它可以通过最有可能在运行时可行的方法集中于路径。此外,一些错误检测器(例如可疑参考比较检测器)依赖于能够执行类型推断,这需要完整的类型层次结构信息。
出于这些原因,我们强烈建议您在运行FindBugs时完全指定辅助类路径。您可以使用-auxclasspath命令行选项或GUI项目编辑器对话框中的“类路径条目”列表来执行此操作。
如果FindBugs找不到应用程序引用的类,它将在分析完成时打印出一条消息,指定缺少的类。您应该修改辅助类路径以指定如何查找缺少的类,然后再次运行FindBugs。
clipse插件无法加载?
此问题的症状是Eclipse无法使用以下消息加载FindBugs UI插件:
由于缺少或禁用先决条件插件“org.eclipse.ui.ide”,插件“edu.umd.cs.findbugs.plugin.eclipse”被禁用
出现此问题的原因是与FindBugs一起分发的Eclipse插件不适用于旧的3.x版本的Eclipse。请使用Eclipse版本3。6(2010年6月)或更新版本。
我收到了很多虚假的“OS”和“ODR”警告?
默认情况下,FindBugs假定任何方法调用都可以抛出未经检查的运行时异常。因此,它可能会假定从该方法抛出的未经检查的异常可能会绕过close()对流或数据库资源的方法的调用。
您可以使用-workHard命令行参数或findbugs.workHard布尔分析属性来使FindBugs更难以修剪不太可能的异常边缘。这通常会减少错误警告的数量,但代价是减慢了分析速度。
Eclipse插件加载,但无法正常工作?
确保您尝试分析的Java代码已正确构建,并且没有类路径或编译错误。
确保项目和工作区FindBugs设置有效 - 有疑问,将它们还原为默认值。
确保错误日志视图不显示错误。
FindBugs的Maven插件在哪里?
可以在这里找到FindBugs 的Maven插件。请注意,FindBugs开发人员不维护Maven插件,因此我们无法回答有关它的问题。
更新日志
更改文档中描述了许多更改,包括新的错误模式:
BSHIFT_WRONG_ADD_PRIORITY,
CO_COMPARETO_INCORRECT_FLOATING,
DC_PARTIALLY_CONSTRUCTED,
DM_BOXED_PRIMITIVE_FOR_COMPARE,
DM_INVALID_MIN_MAX,
ME_MUTABLE_ENUM_FIELD,
ME_ENUM_FIELD_SETTER,
MS_MUTABLE_COLLECTION,
MS_MUTABLE_COLLECTION_PKGPROTECT,
RANGE_ARRAY_INDEX,
RANGE_ARRAY_OFFSET,
RANGE_ARRAY_LENGTH,
RANGE_STRING_INDEX,
RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT,
UC_USELESS_CONDITION,
UC_USELESS_CONDITION_TYPE,
UC_USELESS_OBJECT,
UC_USELESS_OBJECT_STACK,
UC_USELESS_VOID_METHOD
人气软件
-
redis desktop manager2020.1中文 32.52 MB
/简体中文 -
s7 200 smart编程软件 187 MB
/简体中文 -
GX Works 2(三菱PLC编程软件) 487 MB
/简体中文 -
CIMCO Edit V8中文 248 MB
/简体中文 -
JetBrains DataGrip 353 MB
/英文 -
Dev C++下载 (TDM-GCC) 83.52 MB
/简体中文 -
TouchWin编辑工具(信捷触摸屏编程软件) 55.69 MB
/简体中文 -
信捷PLC编程工具软件 14.4 MB
/简体中文 -
TLauncher(Minecraft游戏启动器) 16.95 MB
/英文 -
Ardublock中文版(Arduino图形化编程软件) 2.65 MB
/简体中文