Java静态代码分析工具Infer

标签: java 代码 分析 | 发表时间:2015-06-14 05:39 | 作者:chszs
出处:http://blog.csdn.net

Java静态代码分析工具Infer

作者:chszs,转载需注明。博客主页: http://blog.csdn.net/chszs

一、Infer介绍

Infer是Facebook最新开源的静态程序分析工具,用于在发布移动应用之前对代码进行分析,找出潜在的问题。目前Facebook使用此工具分析Facebook的App,包括Android、iOS、Facebook Messenger和Instagram等。
这里写图片描述

Facebook称该工具帮助其每个月检查出应用潜在的数百个Bug,例如一些空指针访问、资源和内存泄漏等。Infer支持Android的Java和iOS的C和Objective-C代码。
这里写图片描述

Infer在GitHub的主页: https://github.com/facebook/infer

二、Infer使用

1、顶层命令

  1. infer
    运行Infer的主要命令。它其实是一个python脚本。
  2. inferTest
    运行Infer的测试的Shell脚本。它使用Buck来运行测试。
    用法:inferTest {c, objc, java}
  3. inferTraceBugs
    是一个Python脚本,用于在Infer测试报告中流量错误、跟踪错误。

2、辅助命令

InferJava:包含Java前端的二进制程序
InferClang:包含Clang前端的二进制程序
InferAnalyze:包含Infer后端(执行分析)的二进制程序
InferPrint:输出分析结果(例如发现的bug列表等)的二进制程序
inferJ:运行Java文件分析的命令
BuckAnalyze:运行用Buck编译的Java项目的分析命令
inferlib.py:Python库的其它脚本
utils.py:Python库的其它脚本
jwlib.py:Python库的其它脚本

三、Infer的安装

官方提供了预编译好的Infer工具,但只支持Linux和MacOS两个平台。如果愿意使用Infer,直接下载使用即可。
否则,需要下载源码,自己编译。

1、下载Infer

可以从Git仓库下载Infer,命令:

  git clone https://github.com/facebook/infer.git

说明:如果要分析C和Objective-C,Infer还需要clang以及facebook-clang-plugin插件。
facebook-clang-plugin插件见: https://github.com/facebook/facebook-clang-plugins
如果只想分析Java/Android代码,那么无需以上的依赖库。

2、Infer在Linux的安装

先决条件:需要Python 2.7以上版本

安装指令:
(以下安装过程在Debian 7、Ubuntu 14.04以及Ubuntu 12.04.4 LTS等系统中验证通过)

1. 安装OCaml依赖

  # sudo apt-get update
# sudo apt-get upgrade
# sudo apt-get install git openjdk-7-jdk m4 zlib1g-dev python-software-properties build-essential libgmp-dev libmpfr-dev libmpc-dev unzip
# wget https://github.com/ocaml/opam/releases/download/1.2.2/opam-1.2.2-x86_64-Linux -O opam
# chmod +x opam
# ./opam init --comp=4.01.0     # 然后在最后一个问题处按下“y”
# eval `./opam config env`
# ./opam install sawja.1.5 atdgen.1.5.0 javalib.2.3 extlib.1.5.4    # 然后在问题处按下“y”

2. 如果需不要支持C和Objective-C代码的静态分析,继续下面的指令:

  # cd infer
# make -C  infer java
# export PATH=`pwd`/infer/bin:$PATH

注意:不支持Java 8

3. 如果需要既支持Java代码,又支持C和Objective-C代码,那么不要执行上面的第2步,改为执行这里的第3步。

假定以及安装了4.7.2以上版本的GCC(如果OS是Ubuntu 12.04.4 LTS,那么你已经安装了gcc 4.8版和g++ 4.8版。
接着执行以下的指令:

  # sudo apt-get install python-software-properties
# sudo add-apt-repository ppa:ubuntu-toolchain-r/test
# sudo apt-get update
# sudo apt-get install gcc-4.8 g++-4.8
# sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 60 --slave /usr/bin/g++ g++ /usr/bin/g++-4.8

4. 然后继续

  # cd infer
# ./update-fcp.sh
# ../facebook-clang-plugin/clang/setup.sh  # go have a coffee :)
# ./compile-fcp.sh
# make -C infer
# export PATH=`pwd`/infer/bin:$PATH

四、Infer的另一种安装

1、下载

还可以直接下载二进制发行包
Mac OS X版本的: https://github.com/facebook/infer/releases/download/v0.1.0/infer-osx-v0.1.0.tar.xz
Linux发行包: https://github.com/facebook/infer/releases/download/v0.1.0/infer-linux64-v0.1.0.tar.xz

2、安装

解压二进制发行包

  # tar xf infer-linux64-v0.1.0.tar.xz

然后会建立infer-linux64-v0.1.0目录,Infer主要的可执行程序位于infer-linux64-v0.1.0/infer/infer/bin目录。

3、把Infer添加到PATH环境变量中

  # cd infer-linux64-v0.1.0 &&
# echo "export PATH=\"\$PATH:`pwd`/infer/infer/bin\"" \ >> ~/.bash_profile &&
# source ~/.bash_profile
作者:chszs 发表于2015/6/13 21:39:45 原文链接
阅读:0 评论:0 查看评论

相关 [java 代码 分析] 推荐:

Java静态代码分析工具Infer

- - CSDN博客推荐文章
Java静态代码分析工具Infer. 作者:chszs,转载需注明. 博客主页: http://blog.csdn.net/chszs. Infer是Facebook最新开源的静态程序分析工具,用于在发布移动应用之前对代码进行分析,找出潜在的问题. 目前Facebook使用此工具分析Facebook的App,包括Android、iOS、Facebook Messenger和Instagram等.

11 款用于优化、分析源代码的Java工具

- DreamToTrue - ITeye资讯频道
本文将提供一些工具,帮助你优化代码以及检查源代码中的潜在问题. PMD能够扫描Java 源代码,查找类似以下的潜在问题:. 可能的bug——try/catch/finally/switch语句中返回空值. 死代码——未使用的局部变量、参数、私有方法. 不理想的代码——使用String/StringBuffer.

Java数字抽奖游戏核心代码及分析

- - BlogJava_首页
最近,正在看《core java 8th》这本书. 自己按照书上作者一段代码的思想,自己动手写了一个小代码,深刻的感觉到作者Horstmann超高的代码思想. 《core java 8th》真的确实是一本好书,值得慢慢品读,会给人带来无穷的惊喜. 自己写的代码与注释如下,废话不多说,上代码.  * 一个简单的数字彩票游戏类 .

常用 Java 静态代码分析工具的分析与比较

- 去北方-Jack - IBM developerWorks 中国 : 文档库
本文首先介绍了静态代码分析的基本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代码分析工具 (Checkstyle,FindBugs,PMD,Jtest),最后从功能、特性等方面对它们进行分析和比较,希望能够帮助 Java 软件开发人员了解静态代码分析工具,并选择合适的工具应用到软件开发中.

Java代码优化

- - ImportNew
2016年3月修改,结合自己的工作和平时学习的体验重新谈一下为什么要进行代码优化. 在修改之前,我的说法是这样的:. 就像鲸鱼吃虾米一样,也许吃一个两个虾米对于鲸鱼来说作用不大,但是吃的虾米多了,鲸鱼自然饱了. 代码优化一样,也许一个两个的优化,对于提升代码的运行效率意义不大,但是只要处处都能注意代码优化,总体来说对于提升代码的运行效率就很有用了.

java代码开发规范

- - BlogJava_首页
格式规范:                                                                      .       1、TAB空格的数量. 编辑器上的TAB空格数量统一取值为4.       2、换行, 每行120字符.       3、if语句的嵌套层数3层以内   .

Java 代码性能优化

- - IT瘾-geek
代码 优化,一个很重要的课题. 可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢. 这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗. 没用,但是,吃的小虾米一多之后,鲸鱼就被喂饱了. 代码优化也是一样,如果项目着眼于尽快无BUG上线,那么此时可以抓大放小,代码的细节可以不精打细磨;但是如果有足够的时间开发、维护代码,这时候就必须考虑每个可以优化的细节了,一个一个细小的优化点累积起来,对于代码的运行效率绝对是有提升的.

[Java] Java 多线程案例分析

- - V2EX
现要从 hbase中导出 2016 年整年的,大约 10w只股票行情数据,数据总量约 100t. 汇总到 hdfs中供需求方使用. 已知数据量规模大概是 100t,那么单台机器处理肯定不是不行的,先不说大多数磁盘都没这么大,即便磁盘有这么大,单台机器处理对于内存和 cpu 要求也很高,所以我们将问题一般化,使用数量有限的低配机器.

java线程池分析

- - BlogJava-首页技术区
    在Java 5.0之前启动一个任务是通过调用Thread类的start()方法来实现的,任务的提于交和执行是同时进行的,如果你想对任务的执行进行调度或是控制 同时执行的线程数量就需要额外编写代码来完成. 5.0里提供了一个新的任务执行架构使你可以轻松地调度和控制任务的执行,并且可以建立一个类似数据库连接 池的线程池来执行任务.

JAVA集合分析概述

- - ITeye博客
       前段时间在QQ空间写了篇关于JAVA集合分析的日志,现搬到这里与大家分享. 其中有链接可查看各种集合的具体介绍.  最基本的数据结构有数组、链表2种.         1)数组的长度是固定的,容量是有限的(除非扩容). 可以用索引访问,因此访问速度比较快.         2)链表中每个节点指向下一个节点,容量是无限的(不作限制且不考虑硬件).