infer的用法_infer使用的简单介绍

http://ios.jobbole.com/84371/

##infer的使用范围##

infer支持的编译器有如下几种:

####infer能分析的文件类型####

在github上下载demo,demo下examples目录里,你会发现有android项目、C语言文件、java类、oc类、iOS项目,没错啦,infer完全支持以上几种类型的BUG分析。这里我们用ios_hello项目来做栗子:

首先用cd命令进入ios_hello目录,然后运行以下命令进行编译

infer — xcodebuild -target HelloWorldApp -configuration Debug -sdk iphonesimulator

注意: 其中HelloWorldApp是你的项目名称

##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,如下:

infer -a eradicate -- javac Test.java

对于这样的代码,试图访问一个可空的值,却没有做空检查,检测器会检查并报告错误。

class C {

int getLength(@Nullable String s) {

return s.length();

}

}

但如果是以下这样,那么就没问题:

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

目前,我们有不可变转化校验器.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值