java自定义findbugs规则,定制 findbugs规则 - 阿里巴巴一个测试架构师 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
这类文章极少,字节码操作需要对becl库及jvm字节码操作有一定常识。参考:
http://blog.csdn.net/lywybo/archive/2010/03/01/5335748.aspx
ibm介绍的原理实用,但配置过时;支付宝朋友写的message.xml/findbugs.xml不够详细且有笔误。
1.1准备
修改build.xml ,去除所有的validate依赖。执行ant编译。
eclipse引入findbugs工程。
1.2实现类
直接在findbugs目录中增加类
packageedu.umd.cs.findbugs.detect;
importorg.apache.bcel.classfile.Code;
importedu.umd.cs.findbugs.BugInstance;
importedu.umd.cs.findbugs.BugReporter;
importedu.umd.cs.findbugs.bcel.OpcodeStackDetector;
/**
*@authorbo
*这个规则类用于判断System.out和System.error这种情况
*/
publicclassForbiddenSystemClassextendsOpcodeStackDetector{
BugReporterbugReporter;
publicForbiddenSystemClass(BugReporter bugReporter) {
this.bugReporter= bugReporter;
}
/**
* visit方法,在每次进入字节码方法的时候调用
*在每次进入新方法的时候清空标志位
*/
@Override
publicvoidvisit(Code obj) {
super.visit(obj);
}
/**
*每扫描一条字节码就会进入sawOpcode方法
*
*@paramseen字节码的枚举值
*/
@Override
publicvoidsawOpcode(intseen) {
if(seen ==GETSTATIC) {
if(getClassConstantOperand().equals("java/lang/System")
&& (getNameConstantOperand().equals("out") || getNameConstantOperand().equals("error"))) {
BugInstance bug =newBugInstance(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增加内容。
speed="fast"
reports="ALP_SYSTEMCLASS"
hidden="false"/>
Message.xml增加:
category:detector find System.out/System.error
please use log4j
]]>
short desc:System.out/error
class={0},method {1}long desc:System.out,please use log4j
detail info see log4j document
]]>
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.jar中message.xml,findbugs.xml,z加入二进制的edu.umd.cs.findbugs.detect.ForbiddenSystemClass。
重启elipse,还需要确保experimental类的错误能在findbugs窗口展现:windows->preferences->java->findbugs->reporter configuration上的experimental选项勾上。
执行findbugs扫描.class,看到结果出现..
java自定义findbugs规则,定制 findbugs规则 - 阿里巴巴一个测试架构师 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...相关推荐
- java软件测试经典案例,java语言编程案例 - Mrsjjl的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
1.编程实现:二分搜索算法 解答: public class SearchTest { /** 被搜索数据的大小 */ private static final int size = 5000000; ...
- java字母反过来_java之字母反转~~ - Plight - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
字符串的反转输出 这也是面试题中常考的一道.我们就以一个包含了全部26个英文字母,同时又具有完整含义的最短句子作为例子来完成解答.先来看一下这个句子: 引用 A quick brown fox jum ...
- java对import语句_Java的import语句 - 不积跬步,无以至千里 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
51Testing软件测试网]2S+K"rZ/bP*j 程序员可以使用两种import语句:51Testing软件测试网o$UN5EQh 3oZc4n f9P"CoQ;T]0单类型 ...
- java 测试排序_java排序的几种方法 - 善待自己的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
冒泡:publicclassBubbleSort { publicstaticvoidbubbleSort(int[] array) { intlength = array.length -1; fo ...
- Java帧率,android应用性能优化之帧率 - hellominefriend的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
转自:http://www.cnblogs.com/myzh/archive/2013/03/17/2965225.html 1.纵观全局 对于顺畅度的分析,首先要知道一个整体情况,是局部,还是全局, ...
- Java码农怎样才能成为年薪60W的高级架构师进入BAT?
怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名遭到BAT疯抢的架构师. 那么遭到BAT疯抢的架构师应该有怎样的技术知识体系,这不仅是一个刚刚踏入职场的初级程序员也是工作三五年之 ...
- 自学Java day41 图书管理系统-springboot快速开发 从jvav到架构师
前端:html + css + jvavscript + vue + ajax + axios + element ui 后端:jvav + springboot + mybatisplus + my ...
- 【Java从0到架构师】Linux 应用 - 软件包管理、软件安装
Linux 应用 - 软件包管理.软件安装 软件包管理器 rpm yum 软件的安装 jdk 1.8 mysql 5.7 tomcat8 Java 从 0 到架构师目录:[Java从0到架构师]学习记 ...
- 一个忙碌架构师的Java后端书架(2022)
在这份书单里,我是这么一个同学:关心Java,关心架构,对文字有一定的洁癖:基础知识懂一些,但忙,不会花太多时间来研究算法和OS:需要掌握一个软件时会买一本XX in Action,但不买那种各式安装 ...
最新文章
- JAVA基本数据类型、数据类型转换
- 【阿里妈妈营销科学系列】第六篇:营销组合模型MMM
- 浅谈auto_ptr智能指针
- webservie报文格式
- 【操作系统】进程的异步性
- 大数据时代科研不能再两头花钱
- 人机交互-任务4:图形交互界面的设计(web)
- 为什么网站打得开,却ping不通, 网站却打得开
- 尚学堂视频笔记六:多线程
- 5G标准协议中的简写和缩略语
- 软件磁盘阵列(Software RAID)介绍
- 水仙花数的while方法
- 㳟祝202205026 gerrit 公司9周年生日
- 《python数据分析与挖掘》-步骤
- 内存占用过高的原因及解决方法
- 基于PreSCAN Matlab/Simulink的智能驾驶联合仿真【详细图文】
- 插上网线进入转发状态需要等30s,是什么问题?-网络热门问题分析
- Visio Viewer 无法打开 VSD文件 解决方法
- Error: error getting chaincode bytes: ‘go list‘ failed with: cannot find module providing package
- git 开发分支图解