Java静态代码分析工具Infer

简介: 版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/46484951 Java静态代码分析工具Infer作者:chszs,转载需注明。
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/46484951

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
目录
相关文章
|
1月前
|
Java
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
68 9
|
2月前
|
监控 Java 测试技术
Java开发现在比较缺少什么工具?
【10月更文挑战第15天】Java开发现在比较缺少什么工具?
37 1
|
21天前
|
SQL Java 索引
java小工具util系列2:字符串工具
java小工具util系列2:字符串工具
137 83
|
18天前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
37 6
Spring Boot 入门:简化 Java Web 开发的强大工具
|
21天前
|
Java 数据库
java小工具util系列1:日期和字符串转换工具
java小工具util系列1:日期和字符串转换工具
51 26
|
22天前
|
Java
java小工具util系列4:基础工具代码(Msg、PageResult、Response、常量、枚举)
java小工具util系列4:基础工具代码(Msg、PageResult、Response、常量、枚举)
47 24
|
21天前
|
数据采集 存储 监控
Java爬虫:数据采集的强大工具
在数据驱动的时代,Java爬虫技术凭借其强大的功能和灵活性,成为企业获取市场信息、用户行为及竞争情报的关键工具。本文详细介绍了Java爬虫的工作原理、应用场景、构建方法及其重要性,强调了在合法合规的前提下,如何有效利用Java爬虫技术为企业决策提供支持。
|
1月前
|
Java 数据格式 索引
使用 Java 字节码工具检查类文件完整性的原理是什么
Java字节码工具通过解析和分析类文件的字节码,检查其结构和内容是否符合Java虚拟机规范,确保类文件的完整性和合法性,防止恶意代码或损坏的类文件影响程序运行。
43 5
|
1月前
|
Java API Maven
如何使用 Java 字节码工具检查类文件的完整性
本文介绍如何利用Java字节码工具来检测类文件的完整性和有效性,确保类文件未被篡改或损坏,适用于开发和维护阶段的代码质量控制。
74 5
|
2月前
|
Web App开发 Java
使用java操作浏览器的工具selenium-java和webdriver下载地址
【10月更文挑战第12天】Selenium-java依赖包用于自动化Web测试,版本为3.141.59。ChromeDriver和EdgeDriver分别用于控制Chrome和Edge浏览器,需确保版本与浏览器匹配。示例代码展示了如何使用Selenium-java模拟登录CSDN,包括设置驱动路径、添加Cookies和获取页面源码。
130 6