zoukankan      html  css  js  c++  java
  • NullPointerException检测

    APET-NPE插件工作原理

    android应用程序编译的过程如下:

    从图中,我们可以看出,app编译大致经历了四大阶段:java source files -> .class files -> .dex files -> .apk package 。分析这些阶段,我们兴奋的发现,过程中会产生.class文件,因此,可以借鉴字节码的思路来实现检测目标。

    该插件的工作原理如下:

     

     

    通过合理选择编译过程文件+改造findbugs,扫描过程文件(.class files)来实现NullPointerException检测。

    PS:绿色部分为人机交互动作,接下来会详细描述。

     

    怎么安装APET-NPE插件

     

    1、入口链接
    入口链接: http://tools.taobao.net/site/store/product_detail.htm?product_id=336
    2、安装
    方式一:
    (1)使用eclipse的插件安装功能 Help -> Install New Software
    (2)在Work with输入链接 http://tools.taobao.net/file/eclipsePlugin/eclipse/336/update_site
    (3)勾选下面的apet,点next安装
    (4)重启eclipse
    建议取消 Contact all update sites during install to find required software的勾选,已提高安装速度。
    注意:mac和ubuntu操作系统只能采用方式一安装,否则会导致eclipse无法启动!
    方式二:
    (1)确保eclipse处于关闭状态
    (2)拷贝解压后的下载包,直接粘贴至 eclipse 目录下
    推荐使用方式一安装

    3、修改eclipse配置(可选,但推荐做)

    我们都知道,eclipse是内存大户,eclipse的启动配置,直接影响着它的运行速度和用户体验。因此,我们推荐大家使用以下配置:

    1)找到eclipse.ini文件,打开

    (2)推荐删除 --launcher.XXMaxPermSize项,并修改-vmargs配置
    ==============
    windows操作系统
    -vmargs
    -Dosgi.requiredJavaVersion=1.5
    -Dhelp.lucene.tokenizer=standard
    -Xms512m
    -Xmx512m
    -XX:PermSize=96m
    -XX:MaxPermSize=96m
    -Xmn128m
    -XX:+DisableExplicitGC
    ==============
    ==============
    mac操作系统
    -vmargs
    -Dosgi.requiredJavaVersion=1.5
    -Dhelp.lucene.tokenizer=standard
    -XstartOnFirstThread
    -Dorg.eclipse.swt.internal.carbon.smallFonts
    -Xms512m
    -Xmx512m
    -XX:PermSize=256m
    -XX:MaxPermSize=256m
    -Xmn128m
    -XX:NewRatio=8
    -XX:+DisableExplicitGC
    -Xdock:icon=../Resources/Eclipse.icns
    -XstartOnFirstThread
    -Dorg.eclipse.swt.internal.carbon.smallFonts
    ==============
    ==============
    ubuntu操作系统
    -vmargs
    -Dosgi.requiredJavaVersion=1.5
    -Dhelp.lucene.tokenizer=standard
    -Xms512m
    -Xmx512m
    -XX:PermSize=128m
    -XX:MaxPermSize=256m
    -Xmn128m
    -XX:+DisableExplicitGC
    ==============

    PS经过测试,优化后的配置,比默认配置减少67.8%FGC次数,有效提升eclipse速度和体验 :)

    4、启动eclipse

     

     

     

    怎么使用APET-NPE插件

    很简单,操作分为四步进行:

    1、打开bugs table视图:Window -> Show View -> Other -> Apet Category -> bugs table

    2、选中目标项目/文件夹/文件,点击图标(可以关注 eclipse右下角的进度信息)

    3、双击 bugs table 视图 Description列,查看具体的NullPointerException代码

    4、改代码,fix NPE bug

     

    截图如下:

    1、打开bugs table

    2、选中检测对象,进行扫描

     

    3、查看详细的问题代码

     

     

     

    APET-NPE与官方findbugs的区别

    有同学问到,按照字节码的思路,findbugs本身就可以扫描NullPointerException,为什么还要自己开发一套新插件呢? 这个问题提的非常好,年初我们也想直接用findbugs,但不能如愿,它本身的特性,限制了它在android领域的作用,最直接的一点,就是它无法直接扫描android代码。于是,jimmy也就应运而生了。

    APET-NPE较官方findbugs而言,有以下优势,欢迎大家鉴定:

    1、量身定制:我们改造了findbugs的逻辑,简化了android工程的扫描过程。同时在它上面封装一层业务代码,用来选择文件、记录文件路径、管理findbugs启动停止等;
    2、支持多任务:APET-NPE能并行处理多任务,且结果视图更清晰易懂,bug描述中文化、简洁化,而官方findbugs只能一次处理一个任务(前提都是要import到eclipse中);
    3、精简规则:使潜在缺陷的数量从“千数量级”降低到“10数量级”,提高开发、测试工程师的工作效率;
    4、优化逻辑:从逻辑上做了优化,避免findbugs扫描过程中产生的过度消耗机器内存,eclipse挂起、无响应的现象,提高稳定性;
    5、贴心推荐eclipse配置:充分优化eclipse.ini中-vmargs的配置,提升插件运行过程中的用户体验。
  • 相关阅读:
    jmeter函数 助手
    虚拟机如和 连接网络
    Loadrunner如何进行有效的IP欺骗
    JMeter生成HTML性能报告
    关于interrupt(),interrupted(),isInterrupted()用法分析
    我的博客----我的大学
    基本排序算法总结
    多个线程之间的通信问题
    多线程同步问题
    第三十七章 : 奇珍异宝
  • 原文地址:https://www.cnblogs.com/ccxniit2004/p/3688858.html
Copyright © 2011-2022 走看看