【静态代码扫描工具-infer】CentOS下infer环境搭建及Maven项目分析初尝试

一、infer简介

1、引言

Infer 是Facebook 开源一款静态分析工具。

Infer 可以分析 Objective-C, Java 或者 C 代码,重点作用于分析APP(Android/iOS)项目,报告潜在的问题。

Infer 已经成为 Facebook 开发流程的一个环节,包括 Facebook Android 和 iOS 主客户端,Facebook Messenger, Instagram 在内的,以及其他影响亿万用户的手机应用

2、Infer捕捉的bug类型:
  1. Java中捕捉的bug类型
Resource leak
Null dereference
  1. C/OC中捕捉的bug类型
Resource leak
Memory leak
Null dereference
Premature nil termination argument
  1. 只在 OC中捕捉的bug类型
Retain cycle
Parameter not null checked
Ivar not null checked
3、infer基本原理

Infer 运行时,分为两个主要阶段:

  1. 捕获阶段

    Infer 捕获编译命令,将文件翻译成 Infer 内部的中间语言。

    这种翻译和编译类似,Infer 从编译过程获取信息,并进行翻译。这就是我们调用 Infer 时带上一个编译命令的原因了,比如:

    `infer -- clang -c file.c`, `infer -- javac File.java`
    

    。结果就是文件照常编译,同时被 Infer 翻译成中间语言,留作第二阶段处理。特别注意的就是,如果没有文件被编译,那么也没有任何文件会被分析。

    1. 分析阶段

    2. 在分析阶段,Infer 分析 infer-out/ 下的所有文件。分析时,会单独分析每个方法和函数。

    在分析一个函数的时候,如果发现错误,将会停止分析,但这不影响其他函数的继续分析。

    1. 所以你在检查问题的时候,修复输出的错误之后,需要继续运行 Infer 进行检查,知道确认所有问题都已经修复。

    2. 错误除了会显示在标准输出之外,还会输出到文件 infer-out/bug.txt 中,我们过滤这些问题,仅显示最有可能存在的。

    3. 在结果文件夹中(infer-out),同时还有一个 csv 文件 report.csv,这里包含了所有 Infer 产生的信息,包括:错误,警告和信息。

二、linux下的安装

1、infer的下载及安装(参照官网)

image-20200728105223826

2、配置环境变量

3、检查是否安装成功

image-20200728105402789

4、依赖的安装-opam

wget https://github.com/ocaml/opam/releases/download/1.2.2/opam-1.2.2-x86_64-Linux

image-20200728105531852

sudo cp opam-1.2.2-x86_64-Linux /usr/local/bin/opam

初始化opam:

./opam init --comp=4.02.3

image-20200728105858682

并根据提示输入如下命令:

eval `opam config env`

image-20200728110725628

然后安装相关依赖

opam install sawja.1.5 atdgen.1.5.0 javalib.2.3 extlib.1.5.4

image-20200728110847947

三、Maven工程的扫描

进入工程根目录,扫描maven项目

infer -- mvn -DskipTests=true clean package

image-20200728113502266

结果输出:

image-20200728113624009

空指针异常(可以正常捕获):

image-20200728152715863

结果目录在infer-out文件夹下,主要查看bugs.txt文件

image-20200728113732868

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值