Java静态代码分析工具Infer

简介: Java静态代码分析工具Infer 一、Infer介绍 Infer是Facebook最新开源的静态程序分析工具,用于在发布移动应用之前对代码进行分析,找出潜在的问题。目前Facebook使用此工具分析Facebook的App,包括Android、iOS、Facebook Messenger和Instagram等。
Java静态代码分析工具Infer

一、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、顶层命令
infer
运行Infer的主要命令。它其实是一个python脚本。
inferTest
运行Infer的测试的Shell脚本。它使用Buck来运行测试。
用法:inferTest {c, objc, java}
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,命令:

点击(此处)折叠或打开

  1. 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依赖

点击(此处)折叠或打开

  1. # sudo apt-get update
  2. # sudo apt-get upgrade
  3. # sudo apt-get install git openjdk-7-jdk m4 zlib1g-dev python-software-properties build-essential libgmp-dev libmpfr-dev libmpc-dev unzip
  4. # wget https://github.com/ocaml/opam/releases/download/1.2.2/opam-1.2.2-x86_64-Linux -O opam
  5. # chmod +x opam
  6. # ./opam init --comp=4.01.0 # 然后在最后一个问题处按下“y”
  7. # eval `./opam config env`
  8. # ./opam install sawja.1.5 atdgen.1.5.0 javalib.2.3 extlib.1.5.4 # 然后在问题处按下“y”
2. 如果需不要支持C和Objective-C代码的静态分析,继续下面的指令:

点击(此处)折叠或打开

  1. # cd infer
  2. # make -C infer java
  3. # 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版。
接着执行以下的指令:

点击(此处)折叠或打开

  1. # sudo apt-get install python-software-properties
  2. # sudo add-apt-repository ppa:ubuntu-toolchain-r/test
  3. # sudo apt-get update
  4. # sudo apt-get install gcc-4.8 g++-4.8
  5. # 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. 然后继续

点击(此处)折叠或打开

  1. # cd infer
  2. # ./update-fcp.sh
  3. # ../facebook-clang-plugin/clang/setup.sh # go have a coffee :)
  4. # ./compile-fcp.sh
  5. # make -C infer
  6. # 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、安装
解压二进制发行包

点击(此处)折叠或打开

  1. # 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环境变量中

点击(此处)折叠或打开

  1. # cd infer-linux64-v0.1.0 &&
  2. # echo "export PATH=\"\$PATH:`pwd`/infer/infer/bin\"" \ >> ~/.bash_profile &&
  3. # source ~/.bash_profile

目录
相关文章
|
7天前
|
Java
java小工具util系列4:基础工具代码(Msg、PageResult、Response、常量、枚举)
java小工具util系列4:基础工具代码(Msg、PageResult、Response、常量、枚举)
20 5
|
6天前
|
Java 数据库
java小工具util系列1:日期和字符串转换工具
java小工具util系列1:日期和字符串转换工具
16 3
|
7天前
|
Java
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
18 4
|
5天前
|
SQL 安全 Java
JAVA代码审计SAST工具使用与漏洞特征
JAVA代码审计SAST工具使用与漏洞特征
18 1
|
6天前
|
SQL Java 索引
java小工具util系列2:字符串工具
java小工具util系列2:字符串工具
8 2
|
7天前
|
JSON Java fastjson
java小工具util系列3:JSON和实体类转换工具
java小工具util系列3:JSON和实体类转换工具
12 2
|
1月前
|
Arthas Java 测试技术
Java字节码文件、组成,jclasslib插件、阿里arthas工具,Java注解
Java字节码文件、组成、详解、分析;常用工具,jclasslib插件、阿里arthas工具;如何定位线上问题;Java注解
Java字节码文件、组成,jclasslib插件、阿里arthas工具,Java注解
|
27天前
|
监控 IDE Java
【Java性能调优新工具】JDK 22性能分析器:深度剖析,优化无死角!
【9月更文挑战第9天】JDK 22中的性能分析器为Java应用的性能调优提供了强大的支持。通过深度集成、全面监控、精细化分析和灵活报告生成等核心优势,性能分析器帮助开发者实现了对应用性能的全面掌控和深度优化。在未来的Java开发过程中,我们期待性能分析器能够继续发挥重要作用,为Java应用的性能提升贡献更多力量。
|
26天前
|
Java 数据处理
技术分享:高效与灵活并存——Java版通用树形结构转换工具的实现与应用
在软件开发中,树形结构的数据表现形式无处不在,从文件系统的目录树到组织架构的部门树,再到各类产品的分类结构。处理这些具有层级关系的数据时,将其转换为树形结构以便展示和操作显得尤为重要。Java作为一门成熟的编程语言,虽然提供了强大的集合框架,但并未直接提供树形结构转换的内置工具。因此,开发一个高效且灵活的通用树形结构转换工具成为许多项目中的必备需求。
29 2
|
26天前
|
安全 Java 数据安全/隐私保护
- 代码加密混淆工具-Java 编程安全性
在Java编程领域,保护代码安全与知识产权至关重要。本文探讨了代码加密混淆工具的重要性,并介绍了五款流行工具:ProGuard、DexGuard、Jscrambler、DashO 和 Ipa Guard。这些工具通过压缩、优化、混淆和加密等手段,提升代码安全性,保护知识产权。ProGuard 是开源工具,用于压缩和混淆Java代码;DexGuard 专为Android应用程序设计,提供强大加密功能;Jscrambler 基于云,保护Web和移动应用的JavaScript及HTML5代码;DashO 支持多种Java平台和
54 1
下一篇
无影云桌面