findbugs

关于findbugs收集的网络资料信息

 

http://blog.csdn.net/lywybo/article/details/5335748

http://blog.csdn.net/z3h/article/details/1669311

http://findbugs.sourceforge.net/downloads.html

 

1.1       准备

下载 findbugs : http://sourceforge.net/projects/findbugs/files/findbugs/1.3.9/findbugs-1.3.9.zip/download

 

修改 build.xml , 去除所有的 validate 依赖。执行 ant 编译。

eclipse 引入 findbugs 工程

 

1.2       实现类

直接在 findbugs 目录中增加类

 

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 bo

  * 这个规则 类用于判断 System.outSystem.error 这种情况

  */

public class ForbiddenSystemClass extends OpcodeStackDetector {

  BugReporter bugReporter ;

 

  public ForbiddenSystemClass(BugReporter bugReporter) {

  this . bugReporter = bugReporter;

  }

 

  /**

  * visit 方法,在每次进入字节码方法的时候调用

  * 在每次进入新方法的时候清空标志位

  */

  @Override

  public void visit (Code obj) {

  super .visit(obj);

  }

 

  /**

  * 每扫描一条字节码就会进入 sawOpcode 方法

  *

  * @param seen  字节码的枚举值

  */

  @Override

  public void sawOpcode ( int seen) {

  if (seen == GETSTATIC ) {

   if (getClassConstantOperand().equals( "java/lang/System" )

           && (getNameConstantOperand().equals( "out" ) || getNameConstantOperand().equals( "error" ))) {

    BugInstance bug = new BugInstance( this , "ALP_SYSTEMCLASS" , NORMAL_PRIORITY ).addClassAndMethod( this )

            .addSourceLine( this , getPC());

    bug.addInt(getPC());

    bugReporter .reportBug(bug);

   }

  }

  }

}

1.3       修改 etc 目录配置文件 findbugs.xml message.xml

不支持中文注释。

findbugs.xml 增加内容。

< Detector class = "edu.umd.cs.findbugs.detect.ForbiddenSystemClass"  

   speed = "fast"

     reports = "ALP_SYSTEMCLASS"

     hidden = "false" />

 

< BugPattern abbrev = "LIANGJZFORBIDDENSYSTEMCALSS" type = "ALP_SYSTEMCLASS" category = "EXPERIMENTAL"   />

 

 

Message.xml 增加:

 

< Detector class = "edu.umd.cs.findbugs.detect.ForbiddenSystemClass" >

   < Details >

    <![CDATA[

    <p>category:detector find System.out/System.error

    <p>please use log4j

    ]]>

   </ Details >

  </ Detector >

 

< BugPattern type = "ALP_SYSTEMCLASS" >

    < ShortDescription > short desc:System.out/error </ ShortDescription >

    < LongDescription > class={0},method {1}long desc:System.out,please use log4j </ LongDescription >

    < Details >

  <![CDATA[

    <p>detail info see log4j document</p>

  ]]>

    </ Details >

  </ BugPattern >

 

 

 

1.4       findbugs 图形化界面测试

点击 bin/finbugs.bat ,打开扫描的 .class 目录。看到扫描带 System.out 或者 System.error .class 放到 experimental 类错误时,验证成功。

 

 

1.5       替换 eclipse findbugs-plugin.jar 文件

winrar 打开

D:\devtools\eclipse_3.5.1\plugins\edu.umd.cs.findbugs.plugin.eclipse_1.3.9.20090821\findbugs-plugin.jarmessage.xml,findbugs.xml,z 加入二进制的 edu.umd.cs.findbugs.detect .ForbiddenSystemClass

 

重启 elipse, 还需要确保 experimental 类的错误能在 findbugs 窗口展现: windows->preferences->java->findbugs->reporter configuration 上的 experimental 选项勾上。

 

 

 

  执行 findbugs 扫描 .class,看到结果出现..

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值