天天看點

Java靜态代碼分析工具Infer

Java靜态代碼分析工具Infer

一、Infer介紹

Infer是Facebook最新開源的靜态程式分析工具,用于在釋出移動應用之前對代碼進行分析,找出潛在的問題。目前Facebook使用此工具分析Facebook的App,包括Android、iOS、Facebook Messenger和Instagram等。

Facebook稱該工具幫助其每個月檢查出應用潛在的數百個Bug,例如一些空指針通路、資源和記憶體洩漏等。Infer支援Android的Java和iOS的C和Objective-C代碼。

二、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,指令:

點選(此處)折疊或打開

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

說明:如果要分析C和Objective-C,Infer還需要clang以及facebook-clang-plugin插件。

如果隻想分析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 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. 然後繼續

# ./update-fcp.sh

# ../facebook-clang-plugin/clang/setup.sh # go have a coffee :)

# ./compile-fcp.sh

# make -C infer

四、Infer的另一種安裝

1、下載下傳

還可以直接下載下傳二進制發行包

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