工具-infer,静态代码检测
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,静态代码检测的更多相关文章
- Jenkins+PMD构建自动化静态代码检测
前言:软件缺陷是不可避免的,要尽量减少错误并提高软件质量,主要有两在类技术,即缺陷预防和缺陷检测 缺陷预防包括编写更好的设计规范.实施代码审核制度.运行代码静态分析工具.运行单元测试等 PMD是一种开 ...
- JenKins结合cppcheck及cpplint进行代码风格及静态代码检测
JenKins结合cppcheck及cpplint 最近公司需要在Jenkins上安装cppcheck及cpplint进行代码风格及静态代码检测,这里记录下过程. 前提条件 安装了Jenkins 步骤 ...
- iOS开发之使用 infer静态代码扫描工具
infer是Facebook 的 Infer 是一个静态分析工具.可以分析 Objective-C, Java 或者 C 代码,报告潜在的问题. 任何人都可以使用 infer 检测应用,可以将严重的 ...
- 静态代码检测CppCheck的使用
CppCheck的官网下载地址:http://cppcheck.sourceforge.net/ 使用方法有两种: 一:以VS插件的形式使用 二:直接使用客户端界面的GUI,来进行检测 第二种方法忽略 ...
- Docker+Jenkins持续集成环境(3)集成PMD、FindBugs、Checkstyle静态代码检查工具并邮件发送检查结果
为了规范代码,我们一般会集成静态代码检测工具,比如PMD.FindBugs.Checkstyle,那么Jenkins如何集成这些检查工具,并把检查结果放到构建邮件里呢? 今天做了调研和实现,过程如下 ...
- 常用Java静态代码分析工具的分析与比较
给国产静态代码检测工具Pinpoint打Call! 简介 本文首先介绍了静态代码分析的基本概念及主要技术,随后分别介绍了4种现有的主流Java静态代码分析工具 (Checkstyle,FindBugs ...
- SonarQube 之 gitlab-plugin 配合 gitlab-ci 完成每次 commit 代码检测
转载自:https://cloud.tencent.com/developer/article/1010601 1.背景介绍 我们知道使用 SonarQube 可以在日常开发中检测代码质量,除了使用 ...
- java静态代码分析工具infer
infer是一个静态代码分析工具,探测bugs. 主要支持Java.C/C++ 安装:brew install infer 在线展示:https://codeboard.io/projects/115 ...
- 常用 Java 静态代码分析工具的分析与比较
常用 Java 静态代码分析工具的分析与比较 简介: 本文首先介绍了静态代码分析的基 本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代码分析工具 (Checkstyle,FindBu ...
随机推荐
- 学以致用十三-----Centos7.2+python3+YouCompleteMe成功历程
历经几天的摸索,趟过几趟坑之后,终于完成YouCompleteMe的安装配置. 今天同样是个不能忘记的日子,国耻日,勿忘国耻.(9.18) 服务器安装好,基本配置配置好后,开始安装. ======== ...
- 学以致用十一-----centos7.2+python3+YouCompleteMe走过的坑
目的,安装YouCompleteMe 插件 参考的资料 https://blog.csdn.net/zs376957686/article/details/77833953 https://www.c ...
- Tensflow预测股票实例
import pandas as pd import numpy as np import matplotlib.pyplot as plt import tensorflow as tf #———— ...
- css3种引入方式,样式与长度颜色,常用样式,css选择器
# CSS三种引入方式 ## 一.三种方式的书写规范 #### 1.行间式 ```html<div style="width: 100px; height: 100px; backgr ...
- 构造函数new执行与直接执行的区别
//创建一个Test构造 function Test(){ // new执行与直接执行 this的不同指向 this.init(); }; // this 指向 Test Test.prototype ...
- 第87讲:scala中使用For表达式做查询
今天我们来学习下如何用for表达式在scala中做查询. 先来看看示例代码 case class Book(title:String,authors:List[String]) object text ...
- hdu 4282 枚举,非二分
http://acm.hdu.edu.cn/showproblem.php?pid=4282 对于方程X^Z + Y^Z + XYZ = K,已知K求此方程解的个数,其中要求X<Y,Z>1 ...
- hdu 4940 数据太水...
http://acm.hdu.edu.cn/showproblem.php?pid=4940 给出一个有向强连通图,每条边有两个值分别是破坏该边的代价和把该边建成无向边的代价(建立无向边的前提是删除该 ...
- bootstrap1相关学习文档
<em>Bootstrap 框架</em> //倾斜 4.对齐 //设置文 ...
- C# 函数式编程及Monads.net库
函数式编程中,一切皆为函数,这个函数一般不是类级别的,其可以保存在变量中,可以当做参数或返回值,是函数级别的抽象和重用,将函数作为可重用的基本模块,就像面向对象中一切皆为对象,把所有事物抽象为类,面向 ...