Infer - ShenYj/ShenYj.github.io GitHub Wiki

Infer

Infer 是一个静态分析工具。Infer 可以分析 Objective-C, Java 或者 C 代码,报告潜在的问题

任何人都可以使用 Infer 检测应用,这可以将那些严重的 bug 扼杀在发布之前,同时防止应用崩溃和性能低下

包括 Facebook Android 和 iOS 主客户端,Facebook Messenger, Instagram 在内的,以及其他影响亿万用户的手机应用,每次代码变更,都要经过 Infer 的检测。

Inter优势

1: 效率高,规模大,几分钟能扫描数千行代码;

2: 支持增量及非增量分析(后边会解释)

3: 分解分析,整合输出结果。(infer能将代码分解,小范围分析后再将结果整合在一起,兼顾分析的深度和速度)

4: Infer 还可发现 iOS 和 C 代码中的内存泄露

C/OC中捕捉的bug类型

1: Resource leak 2 :Memory leak 3: Null dereference 4: Premature nil termination argument 只在 OC中捕捉的bug类型 1: Retain cycle 2: Parameter not null checked 3: Ivar not null checked

增量模式和非增量模式

在第一次运行的时候,两种模式是一样的,都会对工程的所有文件进行编译检查,产生检查结果:

增量模式:当已经产生分析结果后(build和infer-out文件夹),再执行编译命令,即为增量模式。如有代码没有改动,则此次不会有编译结果产生,如果代码有新的改动,此次只产生新的编译结果。这种以增量为基准的原则叫做增量模式。

非增量模式:在删除了俩个文件夹的情况下,运行文件,会输出所有的编译信息,即此时处于非增量模式。

  • 增量模式和非增量模式的转化

    1: 简单粗暴的做法是删除文件夹,即增量 -> 非增量

    2: 科学的做法是这样的:

    xcodebuild -target HelloWorldApp -configuration Debug -sdk iphonesimulator clean

    以保证增量非增量状态

OCLint、Clang Static Analyzer与Infer对比

OCLint Infer Clang Static Analyzer
支持语言 C,C++,Objective-C等语言 Java 或者 C/C++/Objective-C代码 专门用于针对C,C++和Objective-C
优点 有更多的检查规则和定制
和很多工具集成
可用于持续集成
Infer效率高,规模大,几分钟能扫描数千行代码
支持
增量及非增量分析
分解分析,整合输出结果, 兼顾分析的深度和速度
和xcode集成度更高、更好用
能够用于持续集成
缺点 维护慢 infer只支持Mac和Linux系统 csa对oc可用的检查器只有16条
和代码风格相关的几乎没有
可配置性也比较差
报告格式 Plain Text Report (text)
HTML Report (html)
XML Report (xml)
JSON Reporter (json)
PMD Reporter (pmd)
Xcode Reporter (xcode)
bugs.txt,report.csv,report.json不同格式的结果集 -
⚠️ **GitHub.com Fallback** ⚠️