阅读本文前,建议先了解一下FindBugs的介绍和使用方法。
准备工作
由于FindBugs是分析编译后的class文件,也就是字节码文件。我们需要了解FindBugs底层的处理机制。根据FindBugs官网文档描述,FindBugs使用了BCEL来分析Java字节码文件。从1.1版本开始,FindBugs也支持使用ASM字节码框架来编写bug探测器。
我们需要下载FindBugs源码版用来新增自定义探测器:findbugs-3.0.1-source.zip
也需要下载FindBugs标准版,将findbugs.jar替换为我们的自定义版本后,运行查看结果。
自定义规则
自定义规则思路:
1. 明确要定义的规则。
2. 分析样例代码的字节码内容。
3. 编写探测器。
4. 将规则加入规则文件中。
1. 明确要定义的规则
我将以一个非常简单的规则举例:代码中避免使用有类似System.out的输出语句。
package main;
public class TestFindBugs {
public static void main(String[] args) {
System.out.println("123"); //bug
System.err.println("123"); //bug
}
}
2. 分析样例代码的字节码内容
为了更方便的分析样例代码的字节码内容,这里推荐一个Eclipse上用来查看java文件字节码内容的插件:
Bytecode Outline
官网地址:http://andrei.gmxhome.de/bytecode/index.html
在安装完成后,通过Bytecode工具编译后的字节码文件内容:
// class version 51.0 (51)
// access flags 0x21
public class main/TestFindBugs {