1.工具介绍

Infer 是一个静态程序分析工具,可以对 Java、C 和 Objective-C 程序进行分析,此工具是用 OCaml写成的。https://github.com/facebook/infer
   Infer 最早部署在 Facebook 内部,用于发布移动应用之前对每一行代码进行分析,目前 Facebook 使用此工具分析所开发的 Android、iOS 应用,包括 Facebook Messenger、Instagram 和其他一些应用。 Infer 不仅仅用于移动应用程序的分析,还可以分析 C、Java 等不是 Android 系统的代码。 目前 Infer 着重于发现一些诸如空指针的访问、资源和内存的泄露等导致手机程序崩溃或性能严重下降的问题。

2.环境要求

- Python 2.7

- opam (instructions [here](https://opam.ocaml.org/doc/Install.html#OSX))

- Java <= 1.7 (only needed for the Java analysis,Mac 纯净的安装了 OS X Yosemite 的话,其中是不会包含 Java 的,所以需要自己安装java)

- Xcode <= 6.3, >= 6.1 (only needed for the C/Objective-C analysis)

- clang in Xcode command line tools. You can install them with the command `xcode-select --install` (only needed for the C/Objective-C analysis)

  

1) 下载安装opam(https://opam.ocaml.org/doc/Install.html)

  • 在安装opam前先安装brew,brew 又叫Homebrew,是Mac OSX上的软件包管理工具,能在Mac中方便的安装软件或者卸载软件, 只需要一个命令
  • 安装命令如下:
  • curl -LsSf http://github.com/mxcl/homebrew/tarball/master | sudo tar xvz -C/usr/local --strip 1
  • 接着安装opam:
  • sudo brew install opam # Homebrew, OSX Mavericks or later

2) 安装clang

  •   xcode-select --install

3) 配置opam

  •   opam init -y --comp=4.01.0
  •   eval `opam config env`
  •   opam install -y extlib.1.5.4 atdgen.1.6.0 javalib.2.3.1 sawja.1.5.1

 4)安装java

  • 打开终端输入:java -version
  • 如果当前系统还没有装过 Java 的话,会收到 “No Java runtime present, requesting install.” 的提示信息。然后还会弹出“您需要安装 JDK 才能使用’java‘ 命令行工具”的信息。
  • 点击“更多信息”就回进入 JDK 官方下载网站,之后就能在官网中下载到 Java 8 JRE 或者 Java 8 JKD。

3.安装infer

  • git clone https://github.com/facebook/infer.git
  • cd infer
  • git submodule update --init --recursive
  • facebook-clang-plugins/clang/setup.sh
  • ./compile-fcp.sh
  • make -C infer
  • export PATH=`pwd`/infer/bin:$PATH

5.工程静态分析

分析APP:

  infer -- xcodebuild -target <target name> -configuration <build configuration> -sdk <SDK>

 示例检测HelloWorldApp工程:

  infer -- xcodebuild -target HelloWorldApp -configuration Debug -sdk iphoneos8.3

需要使用 --incremental (或 -i) 使得增量编译有结果输出:

  infer --incremental -- xcodebuild -target HelloWorldApp -configuration Debug -sdk iphoneos8.3

或者在编译前清理:

  xcodebuild -target HelloWorldApp -configuration Debug -sdk iphoneos8.3 clean

ok,到这你就会看到你想看的结果.

参考文档:http://infer.liaohuqiu.net/docs/getting-started.html

工具-infer,静态代码检测的更多相关文章

  1. Jenkins+PMD构建自动化静态代码检测

    前言:软件缺陷是不可避免的,要尽量减少错误并提高软件质量,主要有两在类技术,即缺陷预防和缺陷检测 缺陷预防包括编写更好的设计规范.实施代码审核制度.运行代码静态分析工具.运行单元测试等 PMD是一种开 ...

  2. JenKins结合cppcheck及cpplint进行代码风格及静态代码检测

    JenKins结合cppcheck及cpplint 最近公司需要在Jenkins上安装cppcheck及cpplint进行代码风格及静态代码检测,这里记录下过程. 前提条件 安装了Jenkins 步骤 ...

  3. iOS开发之使用 infer静态代码扫描工具

    infer是Facebook 的 Infer 是一个静态分析工具.可以分析 Objective-C, Java 或者 C 代码,报告潜在的问题. 任何人都可以使用 infer 检测应用,可以将严重的 ...

  4. 静态代码检测CppCheck的使用

    CppCheck的官网下载地址:http://cppcheck.sourceforge.net/ 使用方法有两种: 一:以VS插件的形式使用 二:直接使用客户端界面的GUI,来进行检测 第二种方法忽略 ...

  5. Docker+Jenkins持续集成环境(3)集成PMD、FindBugs、Checkstyle静态代码检查工具并邮件发送检查结果

    为了规范代码,我们一般会集成静态代码检测工具,比如PMD.FindBugs.Checkstyle,那么Jenkins如何集成这些检查工具,并把检查结果放到构建邮件里呢? 今天做了调研和实现,过程如下 ...

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

    给国产静态代码检测工具Pinpoint打Call! 简介 本文首先介绍了静态代码分析的基本概念及主要技术,随后分别介绍了4种现有的主流Java静态代码分析工具 (Checkstyle,FindBugs ...

  7. SonarQube 之 gitlab-plugin 配合 gitlab-ci 完成每次 commit 代码检测

    转载自:https://cloud.tencent.com/developer/article/1010601 1.背景介绍 我们知道使用 SonarQube 可以在日常开发中检测代码质量,除了使用 ...

  8. java静态代码分析工具infer

    infer是一个静态代码分析工具,探测bugs. 主要支持Java.C/C++ 安装:brew install infer 在线展示:https://codeboard.io/projects/115 ...

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

    常用 Java 静态代码分析工具的分析与比较 简介: 本文首先介绍了静态代码分析的基 本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代码分析工具 (Checkstyle,FindBu ...

随机推荐

  1. 学以致用十三-----Centos7.2+python3+YouCompleteMe成功历程

    历经几天的摸索,趟过几趟坑之后,终于完成YouCompleteMe的安装配置. 今天同样是个不能忘记的日子,国耻日,勿忘国耻.(9.18) 服务器安装好,基本配置配置好后,开始安装. ======== ...

  2. 学以致用十一-----centos7.2+python3+YouCompleteMe走过的坑

    目的,安装YouCompleteMe 插件 参考的资料 https://blog.csdn.net/zs376957686/article/details/77833953 https://www.c ...

  3. Tensflow预测股票实例

    import pandas as pd import numpy as np import matplotlib.pyplot as plt import tensorflow as tf #———— ...

  4. css3种引入方式,样式与长度颜色,常用样式,css选择器

    # CSS三种引入方式 ## 一.三种方式的书写规范 #### 1.行间式 ```html<div style="width: 100px; height: 100px; backgr ...

  5. 构造函数new执行与直接执行的区别

    //创建一个Test构造 function Test(){ // new执行与直接执行 this的不同指向 this.init(); }; // this 指向 Test Test.prototype ...

  6. 第87讲:scala中使用For表达式做查询

    今天我们来学习下如何用for表达式在scala中做查询. 先来看看示例代码 case class Book(title:String,authors:List[String]) object text ...

  7. hdu 4282 枚举,非二分

    http://acm.hdu.edu.cn/showproblem.php?pid=4282 对于方程X^Z + Y^Z + XYZ = K,已知K求此方程解的个数,其中要求X<Y,Z>1 ...

  8. hdu 4940 数据太水...

    http://acm.hdu.edu.cn/showproblem.php?pid=4940 给出一个有向强连通图,每条边有两个值分别是破坏该边的代价和把该边建成无向边的代价(建立无向边的前提是删除该 ...

  9. bootstrap1相关学习文档

    <em>Bootstrap 框架</em>                                                    //倾斜 4.对齐 //设置文 ...

  10. C# 函数式编程及Monads.net库

    函数式编程中,一切皆为函数,这个函数一般不是类级别的,其可以保存在变量中,可以当做参数或返回值,是函数级别的抽象和重用,将函数作为可重用的基本模块,就像面向对象中一切皆为对象,把所有事物抽象为类,面向 ...