Infer

优质
小牛编辑
128浏览
2023-12-01

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对比

OCLintInferClang Static Analyzer
支持语言C,C++,Objective-C等语言Java 或者 C/C++/Objective-C代码专门用于针对C,C++和Objective-C
优点有更多的检查规则和定制
和很多工具集成
可用于持续集成
Infer效率高,规模大,几分钟能扫描数千行代码
支持
增量及非增量分析
分解分析,整合输出结果, 兼顾分析的深度和速度</mark>
和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不同格式的结果集-