9游戏

findbugs,findbugs使用

如若 36

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:运行时性能问题,如由变量定义,方法调用导致的代码低效问题。

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检测器

1.java 检测类 继承?OpcodeStackDetectorpublic class SysoutDetector extends OpcodeStackDetector {BugReporter bugReporter;public SysoutDetector(BugReporter bugReporter) {this.bugReporter = bugReporter;}@Overridepublic 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生成报告