×

findbugs li f

findbugs(findbugs和pclint有什么区别)

admin admin 发表于2023-03-25 20:18:54 浏览46 评论0

抢沙发发表评论

本文目录

findbugs和pclint有什么区别

区别是:
findbug与pclint都是针对软件漏洞进行代码检测的工具软件。findbug针对的是Java代码,pclint针对的是C代码或者C++。
Findbugs是一款Java静态代码分析工具,与其他静态分析工具(如Checkstyle和PMD)不同,Findbugs 不注重样式或者格式,它专注于寻找真正的缺陷或者潜在的性能问题,它可以帮助java工程师提高代码质量以及排除隐含的缺陷。有了静态分析工具,就可以在不实际运行程序的情况对软件进行分析。
Findbugs运用Apache BCEL 库分析类文件(class文件)而不是源代码,将字节码与一组缺陷模式进行对比以发现可能的问题。
pclint是GIMPEL SOFTWARE 公司研发的C/C++软件代码静态分析工具,他的全称是PC-Lint/FlexeLint for C/C++。PC-Lint 能够在Windows、MS-DOS 和OS/2 平台上使用,以二进制可执行文档的形式发布,而FlexeLint 运行于其他平台,以源代码的形式发布。pclint在全球拥有广泛的客户群,许多大型的软件研发组织都把pclint检查作为代码走查的第一道工序。pclint不但能够对程式进行全局分析,识别没有被适当检验的数组下标,报告未被初始化的变量,警告使用空指针连同冗余的代码,还能够有效地提出许多程序在空间利用、运行效率上的改进点。

findbugs,pmd,checkstyles三者都是代码规范静态检查工具,它们之间有何异同

区别是: findbug与pclint都是针对软件漏洞进行代码检测的工具软件。findbug针对的是Java代码,pclint针对的是C代码或者C++。 Findbugs是一款Java静态代码分析工具,与其他静态分析工具(如Checkstyle和PMD)不同,Findbugs 不注重样式或者格式

java 可以配置 findbugs的哪些特性

1、 Run FindBugs Automatically开关
当此项选中后,FindBugs将会在你修改Java类时自动运行,如你设置了Eclipse自动编译开关后,当你修改完Java文件保存,FindBugs就会运行,并将相应的信息显示出来。
当此项没有选中,你只能每次在需要的时候自己去运行FindBugs来检查你的代码。
2.、Minimum priority to report选择项
这个选择项是让你选择哪个级别的信息进行显示,有Low、Medium、High三个选择项可以选择,很类似于Log4J的级别设置啦。 比如:
你选择了High选择项,那么只有是High级别的提示信息才会被显示。
你选择了Medium选择项,那么只有是Medium和High级别的提示信息才会被显示。
你选择了Low选择项,那么所有级别的提示信息都会被显示。

findbugs 定位到哪一行java

FindBugs 是一个静态分析工具,它检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题。有了静态分析工具,就可以在不实际运行程序的情况对进行分析。不是通过分析类文件的形式或结构来确定程序的意图,而是通常使用 Visitor 模式(请参阅 参考资料)。图 1 显示了分析一个项目的结果(为防止可怕的犯罪,这里不给出它的名字):
在FindBugs的GUI中,需要先选择待扫描的.class文件(FindBugs其实就是对编译后的class进行扫描,藉以发现一些隐藏的bug。)。如果你拥有这些.class档对应的源文件,可把这些.java文件再选上,这样便可以从稍后得出的报告中快捷的定位到出问题的代码上面。此外,还可以选上工程所使用的library,这样似乎可以帮助FindBugs做一些高阶的检查,藉以发现一些更深层的bug。
选定了以上各项后,便可以开始检测了。检测的过程可能会花好几分钟,具体视工程的规模而定。检测完毕可生成一份详细的报告,藉由这份报告,可以发现许多代码中间潜在的bug。比较典型的,如引用了空指针(null pointer dereference), 特定的资源(db connection)未关闭,等等。如果用人工检查的方式,这些bug可能很难才会被发现,或许永远也无法发现,直到运行时发作…当除掉了这些典型的(classic) bug后,可以确信的是,我们的系统稳定度将会上一个新的台阶。
以目前遇到的状况来看,FindBugs可以有两种使用时机。
开发阶段编辑
当Developer完成了某一部分功能模块开发的时候(这通常是指代码撰写完成,并已debug通过之后),可藉由FindBugs对该模块涉及的java文件进行一次扫描,以发现一些不易察觉的bug或是效能问题。交付新版的时候,开发团队可以跑一下FindBugs,除掉一些隐藏的Bug。FindBugs得出的报告可以作为该版本的一个参考文档一并交付给测试团队留档待查。
在开发阶段使用FindBugs,一方面开发人员可以对新版的品质更有信心,另一方面,测试人员藉此可以把更多的精力放在业务逻辑的确认上面,而不是花大量精力去进一些要在特殊状况下才可能出现的BUG(典型的如Null Pointer Dereference)。从而可以提高测试的效率。
3维护阶段编辑
这里指的是系统已经上线,却发现因为代码中的某一个bug导致系统崩溃。在除掉这个已暴露的bug之后,为了快速的找出类似的但还未暴露的 bug,可以使用FindBugs对该版的代码进行扫描。当然,在维护阶段使用FindBugs往往是无奈之举,且时间紧迫。此外,如果本来在新版交付的时候就使用过FindBugs的话,往往意味着这种bug是FindBugs还无法检测出的。这也是FindBugs局限的地方。
FindBugs出到目前的版本,功能已经相当强大,不过也有待完善的地方。从实际使用来看,有一些隐藏的bug并不能靠FindBugs直接发现。那么,可不可以撰写一个新的 Detector,来发现这种将一个未初始化的reference传来传去而形成的潜在的bug呢?理论上来讲,应该是可以的。这个 Detector目前还未实现。哪位如果有兴趣的话,可以参考FindBugs, Part 2: Writing custom detectors(扩展阅读)这篇文章,帮忙实现这个Detector。实现一个新的Detector,便可以检测出一种新型的bug,这样不知又可以帮开发人员省去多少人工检查的时间,功德无量啊。
FindBugs也不能发现非java的Bug。对于非java撰写的代码,如javascript,SQL等等,要找出其中可能的bug,FindBugs是无能为力的。当然,javascript中的bug似乎还不至于使系统崩溃,而SQL中的bug往往又跟业务逻辑相关,只要测试仔细一些应该是可以发现的。
FindBugs不过是一个工具。作为开发人员,当然首先要在编程的时候努力避免引入bug,而不要依赖于某个工具来为自己把关。不过由于代码的复杂性,一些隐藏的bug确实很难靠咱们的肉眼发现。这时,应用一些好的工具或许就可以帮你发现这样的bug。这便是FingBug存在的价值。

findBugs 这个报的是什么异常

  FindBugs 是一个静态分析工具,它检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题。有了静态分析工具,就可以在不实际运行程序的情况对软件进行分析。不是通过分析类文件的形式或结构来确定程序的意图,而是通常使用 Visitor 模式(请参阅 参考资料)。
  在FindBugs的GUI中,需要先选择待扫描的.class文件(FindBugs其实就是对编译后的class进行扫描,藉以发现一些隐藏的bug。)。如果你拥有这些.class档对应的源文件,可把这些.java文件再选上,这样便可以从稍后得出的报告中快捷的定位到出问题的代码上面。此外,还可以选上工程所使用的library,这样似乎可以帮助FindBugs做一些高阶的检查,藉以发现一些更深层的bug。
  选定了以上各项后,便可以开始检测了。检测的过程可能会花好几分钟,具体视工程的规模而定。检测完毕可生成一份详细的报告,藉由这份报告,可以发现许多代码中间潜在的bug。比较典型的,如引用了空指针(null pointer dereference), 特定的资源(db connection)未关闭,等等。如果用人工检查的方式,这些bug可能很难才会被发现,或许永远也无法发现,直到运行时发作…当除掉了这些典型的(classic) bug后,可以确信的是,我们的系统稳定度将会上一个新的台阶。
  以目前遇到的状况来看,FindBugs可以有两种使用时机。

如何自定义findBugs检测器

1.java 检测类 继承?OpcodeStackDetector
public class SysoutDetector extends OpcodeStackDetector {
BugReporter bugReporter;
public SysoutDetector(BugReporter bugReporter) {
this.bugReporter = bugReporter;
}
@Override
public void sawOpcode(int seen) {
if (seen == GETSTATIC) {
if (getClassConstantOperand().equals(“java/lang/System”)// get class mapping
&& (getNameConstantOperand().equals(“out”))) {
BugInstance bug = new BugInstance(this, “CHECK_SYSTEMCLASS”, NORMAL_PRIORITY).addClassAndMethod(this).addSourceLine(this, getPC());
bug.addInt(getPC());
bugReporter.reportBug(bug);
}
}
}
}
BugInstance 的type参数 为 messages.xml中发布的?《BugPattern type=”CHECK_SYSTEMCLASS”》
2.更改messages.xml
注册
《BugPattern type=”CHECK_SYSTEMCLASS”》
《ShortDescription》使用了System.out 《/ShortDescription》
《LongDescription》checks {1} method.Changes to logger if needed.《/LongDescription》
《Details》
《![CDATA[
《p》system class used.
《/p》
]]》
《/Details》
该 ?BugPattern 的?ShortDescription 为findbugs静态检测后bug exlpoer 中的bug 节点名称
注册?《Detector class=”edu.umd.cs.findbugs.detect. SysoutDetector “》
《Details》
《![CDATA[
《p》Checks for classes used System class. 《/p》
]]》
《/Details》
《/Detector》
注册?《BugCode abbrev=”CUSTOM”》System class used《/BugCode》 ,注册一个自己的bugCode,意义不大,如果自己不注册一个,
findbugs.xml中 abbrev值就要使用系统的
3.修改findbugs.xml 文件
注册 《BugPattern abbrev=”CUSTOM” type=”CHECK_SYSTEMCLASS” category=”EXPERIMENTAL” /》
此意: ?CHECK_SYSTEMCLASS 为?EXPERIMENTAL 下检测器,
EXPERIMENTAL 在Myeclispe/window/preferences/java/findbugs 中勾选
注册《Detector class=”edu.umd.cs.findbugs.detect.SysoutDetector”
speed=”fast” reports=”CHECK_SYSTEMCLASS” hidden=”false”/》
4.发布
找到findbugs的Myeclipse插件目录,找到?findbugs-plugin.jar
替换其下的findbugs.xml 和 messages.xml,以及加入新的class文件。重启Myeclipse即可。

findbugs.jar 怎么安装

安装步骤:
1.点击“Help-》InstallNew Software”,如下图:
2.点击“Add”,然后在弹出框“Name”输入“findBugs”,“Location”输入“findbugs.cs.umd.edu/eclipse”,点击“OK”,如下图:
3.选择对应插件,然后点击“next-》next-》finish”。
4.完成安装之后重启eclipse,右击项目文件或目录,会发现多了Findbugs的菜单,如下图:
当然也可以直接从 download.csdn.net/detail/hailshao/6593725下载,然后将文件复制到你本地eclipse的plugins目录,然后重启eclipse即可。

android studio 怎么用findbugs


在Android开发中,会出现一些比较不容易发现的bug,比如对于null的判断,出现遗漏的时候会出现’NullPointException’,比如下面的代码:
if (ta != null) {
mPanelHeight = ta.getDimensionPixelSize(R.styleable.SlidingUpPanelLayout_umanoPanelHeight, -1);
mShadowHeight = ta.getDimensionPixelSize(R.styleable.SlidingUpPanelLayout_umanoShadowHeight, -1);
mParallaxOffset = ta.getDimensionPixelSize(R.styleable.SlidingUpPanelLayout_umanoParalaxOffset, -1);
.......
}
ta.recycle();
开头的时候判断ta不为null的情况,但是在调用 ta.recycle() 的时候是在if之外,但调用这个方法的时候,传入的参数ta为null的时候就会出现 NullPointException ,如果能够通过工具找到这种潜在的bug就最好不过了。
FindBugs
FindBugs 是一个Java静态分析工具,用来检查类或者jar文件,用来发现可能的问题。检测完成之后会生成一份详细的报告,借助这份报告可以找到潜在的bug,比如 NullPointException ,特定的资源没有关闭,查询数据库没有调用 Cursor.close() 等,如果才用人工的方式很难才能发现类似的bug,或者这些bug永远不会发现,直到运行时才发现,还有可能是一直没有出现,别人调用的时候没有做检查就调用了.....
Java的静态分析工具当然可以无难度的在Android上面运行,通过这种FindBugs的检查可以让App的运行更加的稳定。
FindBugs官网地址:

如何更好地利用Pmd,Findbugs和CheckStyle分析结果


Pmd 它是一个基于静态规则集的Java源码分析器,它可以识别出潜在的如下问题:
– 可能的bug——空的try/catch/finally/switch块。
– 无用代码(Dead code):无用的本地变量,方法参数和私有方法。
– 空的if/while语句。
– 过度复杂的表达式——不必要的if语句,本来可以用while循环但是却用了for循环。
– 可优化的代码:浪费性能的String/StringBuffer的使用。
FindBugs 它用来查找Java代码中存在的bug。它使用静态分析方法标识出Java程序中上百种潜在的不同类型的错误。
Checkstyle 它定义了一系列可用的模块,每一个模块提供了严格程度(强制的,可选的…)可配置的检查规则。规则可以触发通知(notification),警告(warning)和错误(error)。

如何使用FindBugs进行安全扫描


1.Bug是findbug Eclipse插件原生的bug信息描述,Confidence 是fingbug团队认为该代码导致bug的可能性。
2.以下都是我使用findbug在公司项目中找到的一些bug,这里做一些中文的简短说明(不是翻译)。
3.篇幅可能会有点长,阅读时,大家可以通过ctrl+f根据关键字查找自己相关的bug。