Infer
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效率高,规模大,几分钟能扫描数千行代码 支持 | |
增量及非增量分析 分解分析,整合输出结果, 兼顾分析的深度和速度</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不同格式的结果集 | - |