http://ios.jobbole.com/84371/ ##infer的使用范围## infer支持的编译器有以下几种: java
####infer能分析的文件类型#### 在github上下载demo,demo下examples目录里,你会发现有android项目、C语言文件、java类、oc类、iOS项目,没错啦,infer彻底支持以上几种类型的BUG分析。这里咱们用ios_hello项目来作栗子:android
首先用cd命令进入ios_hello目录,而后运行如下命令进行编译ios
infer — xcodebuild -target HelloWorldApp -configuration Debug -sdk iphonesimulator
注意: 其中HelloWorldApp是你的项目名称git
##gradle## 编译一个gradle工程:infer -- gradle build ##Eradicate## ####什么是 Infer:Eradicate ?#### Infer:Eradicate 是针对Java @Nullable 注解的一个检查器,是 Infer 静态分析工具套件中的一部分,目标是消除空指针异常。 @Nullable 注解指示一个参数,类成员,或者方法返回值能够是 null。 当这个注解修饰一个参数时,说明这个参数是容许为空的,方法体内部应该处理为空的状况。 当注解修饰一个参数时,说明方法的返回值是能够为空的。 从标注为 @Nullable 的程序开始,可空性将随着赋值和调用进行传播,分析器对这个流程敏感的传播过程进行分析。 分析以后,对那些未受保护的空值访问,先后不一致的@Nullable 注解或者该标记却没标记的方法或变量,加上错误标记。 Infer:Eradicate也用来将以前未标记注解的代码添加注解。 ####什么是 @Nullable 约定?#### 一般对于一个对象,若是你什么都没说明,默认认为这个对象不会是空值。在可能的状况下,咱们建议: 安全编程,注解空值。 若是可能为空值,即为类型参数加上 @Nullable 注解。 ####什么是注解#### 注解放在方法调用或者成员变量访问的接口中: 定义方法时的参数和返回值类型 成员变量申明 局部变量没有办法加注解,他们的可空性是推断出来的。 ####Infer:Eradicate 如何调用?#### 经过 -a eradicate 选项,能够启用 Eradicate,以下:github
infer -a eradicate -- javac Test.java
对于这样的代码,试图访问一个可空的值,却没有作空检查,检测器会检查并报告错误。编程
class C { int getLength(@Nullable String s) { return s.length(); } }
但若是是如下这样,那么就没问题:xcode
class C { int getLength(@Nullable String s) { if (s != null) { return s.length(); } else { return -1; } } }
Eradicate 会输出这些警告. ##checkers## Infer 的分析器执行复杂的程序间(interprocedural,专一总体)静态分析。但当咱们针对那些 linter 中常见的分析,不须要复杂的程序间的分析的时候,咱们有一个称为 Infer:Checkers(Infer 校验器) 的框架。 Infer:Checkers 能够检测给定项目中每一个方法的某个指定属性,虽然分析了整个项目,可是这种分析算是程序内的而不是程序间的。 经过选项 -a checkers 能够在分析时加入校验器(checkers),以下:安全
infer -a checkers -- javac Test.java
目前,咱们有不可变转化校验器.框架