基础篇--findbugs for idea

原创 2016年08月31日 15:17:38


一、FindBugs简介(盗取百度知道)

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

1)选择idea配置面板,我以mac为例,windows是打开settings


2)选择插件仓库




3)输入插件名称,install即可,因为我已安装所以显示restart



4)如果安装或下载失败,也可以自己进行下载插件后安装,选择你要的版本

官网地址:https://plugins.jetbrains.com/plugin/3847?pr=idea

但是需要注意你的idea版本,官网有特别说明







三、使用小测

我也刚开始使用,功能还在探索之中,以下是我以前写的一个测试用例,安装完成了先来搞一下看看

package com.yeepay.g3.app.watch.Array;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;

/**
 * 类名称: ArrayList <br>
 * 类描述: <br>
 *
 * @author: hua.jin
 * @since: 16/8/18 下午3:15
 * @version: 1.0.0
 */
public class ArrayListMemo {

    public static void main(String[] args) throws IOException {
        Runtime run = Runtime.getRuntime();
        run.gc();
        System.out.println("time: " + (new Date()));
        // 获取开始时内存使用量
        long startMem = run.totalMemory() - run.freeMemory();
        System.out.println("memory> total:" + run.totalMemory() + " free:" + run.freeMemory() + " used:" + startMem);


        ArrayList list = new ArrayList();
        int size = 10000000;
        int i = 0;
        try {
            list.ensureCapacity(size);// 是否扩容
            for (; i < size; i++) {
                list.add(i);
            }
        } catch (Throwable e) {
            e.printStackTrace();
            System.out.println("i= " + i);
        }

        System.out.println("time: " + (new Date()));
        long endMem = run.totalMemory() - run.freeMemory();
        System.out.println("memory> total:" + run.totalMemory() + " free:" + run.freeMemory() + " used:" + endMem);
        System.out.println("memory difference:" + (endMem - startMem));
    }
}

1)选中你要检测类进行右键操作



2)确认检测



3)弹出检测结果



4)信息内容

a) compiler issues,编译器问题。感觉就是一些警告信息,待确认的信息

 因为我在创建list的时候没有设置参数类型,但是添加信息确是数字

ArrayList list = new ArrayList();



b) javadoc 问题暂时没出有用信息


c) probable bugs 重点来了

由于我只是测试arraylist的扩容问题,所以并未对list的结果有任何应用,所以提示bug如下

contents of collection 'list' are updated,but never queried at line 26




 四、bug修复如下

package com.yeepay.g3.app.watch.Array;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;

/**
 * 类名称: ArrayList <br>
 * 类描述: <br>
 *
 * @author: hua.jin
 * @since: 16/8/18 下午3:15
 * @version: 1.0.0
 */
public class ArrayListMemo {

    public static void main(String[] args) throws IOException {
        Runtime run = Runtime.getRuntime();
        run.gc();
        System.out.println("time: " + (new Date()));
        // 获取开始时内存使用量
        long startMem = run.totalMemory() - run.freeMemory();
        System.out.println("memory> total:" + run.totalMemory() + " free:" + run.freeMemory() + " used:" + startMem);


<span style="color:#FF0000;">        ArrayList<Integer> list = new ArrayList<Integer>();</span>// 添加类型
        int size = 10000000;
        int i = 0;
        try {
            list.ensureCapacity(size);// 是否扩容
            for (; i < size; i++) {
                list.add(i);
            }
        } catch (Throwable e) {
            e.printStackTrace();
            System.out.println("i= " + i);
        }
<span style="color:#FF0000;">        System.out.println("size: " + list.size());</span>// 修改信息之后引用输出
        System.out.println("time: " + (new Date()));
        long endMem = run.totalMemory() - run.freeMemory();
        System.out.println("memory> total:" + run.totalMemory() + " free:" + run.freeMemory() + " used:" + endMem);
        System.out.println("memory difference:" + (endMem - startMem));
    }
}

检测结果如下:




学习使用中,后续使用过程中持续更新



相关文章推荐

Android Studio 中提示 Private field 'mType' is assigned but never accessed 的原因

Android Studio 是个很酷的编译器,之前发现有个代码提示很奇怪,但无奈一直没看懂他的意思,不过也没报错就没太在意,刚刚突然领悟了,原来是自己代码不规范。 Private field 'mT...
  • zsjangel
  • zsjangel
  • 2014年02月13日 00:42
  • 10146

findbugs for idea

  • 2016年12月01日 16:05
  • 6.7MB
  • 下载

FindBugs-IDEA的使用

我们通常都会在APP上线之后,发现各种错误,尤其是空指针异常,这些错误对于用户体验来说是非常不好的,但其实大部分的问题,我们都能够提前发现. 在编写代码的过程中,可能不会时时刻刻记得检查空的引用,还...
  • a52571
  • a52571
  • 2017年07月06日 15:13
  • 92

使用FindBugs-IDEA插件找到代码中潜在的问题

我们通常都会在APP上线之后,发现各种错误,尤其是空指针异常,这些错误对于用户体验来说是非常不好的,但其实大部分的问题,我们都能够提前发现.在编写代码的过程中,可能不会时时刻刻记得检查空的引用,还有删...

FindBugs-IDEA插件的使用

前言 Findbugs很多人都并不陌生,Eclipse中有插件可以帮助查找代码中隐藏的bug,IDEA中也有这款插件。这个插件可以帮助我们查找隐藏的bug,比较重要的功能就是查找潜在的null指针。...

Android代码优化工具FindBugs-IDEA

FindBugs-IDEA是Android Studio里面的一个插件,可以定位出项目里面的一些隐藏bug。 1.首先去AndroidStudio里面下载FindBugs-IDEA插件 ...

Android FindBugs-IDEA插件的下载和简单使用

我们通常都会在APP上线之后,发现各种错误,尤其是空指针异常,这些错误对于用户体验来说是非常不好的,但其实大部分的问题,我们都能够提前发现.在编写代码的过程中,可能不会时时刻刻记得检查空的引用,还有删...

IntelliJ IDEA FindBugs-IDEA 扫描bug插件

  • 2017年09月07日 20:14
  • 7.54MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:基础篇--findbugs for idea
举报原因:
原因补充:

(最多只允许输入30个字)