代码扫描

使用Infer进行静态代码扫描

2019-11-05  本文已影响0人  ZT_Story

安装Infer

在Mac上可以直接使用brew 来安装,比较简单

brew install infer 

使用Infer

infer -- gradle build
cd 到你的当前工程目录下
# 普通工程
infer run -- xcodebuild -target xxx -scheme xxx -configuration Debug -sdk iphonesimulator
# pod工程
infer run -- xcodebuild -workspace xxx.xcworkspace -scheme xxx -configuration Debug -sdk iphonesimulator

查看报告

脚本跑完之后在 infer-out/bugs.txt查看结果

出现常见错误类型有:

NULL_DEREFERENCE:空指针的情况。

1.传参为0的情况下。例如代码中,在调用showAlertViewA()时,将tag传参为0,infer检测此处传0,判断为一个NULL空指针,所以爆出警告。这里可以理解为误报,不会出现问题。
2.通过malloc,calloc,realloc等函数申请内存,当内存不足时,有可能会在该函数中返回NULL,如果没有做NULL的判断,则警告
3.在创建NSArray或者NSDictionary时,传入的参数有可能会nil。由于NSArray与NSDictionary不接受空指针,所以在对其addObject或者setObject:forKey: 时需要进行判断一下是否为nil

MEMORY_LEAK:内存泄漏:

项目代码全面启动了ARC进行内存管理,在OC层没有扫描出内存泄露。目前扫描出的内存泄露问题都是使用了malloc或者ralloc等c语言内存申请函数,在函数提前return前没有及时free

RESOURCE_LEAK:资源泄漏
ASSIGN_POINTER_WARNING

由于在mrc时代,没有weak指针,所以一些view的属性声明是、unsafe__unretain_的形式,在arc中,这个属性被判断为assign,需要将其修改为weak或者strong

DIRECT_ATOMIC_PROPERTY_ACCESS

在代码中使用了使用了一个atomic的成员变量,infer建议我们将atomic修改为nonatomic。由于OC中,属性会被默认设置为atomic属性,我们需要显示将属性声明为nonatomic。

IVAR_NOT_NULL_CHECKED

在代码中调用block,运行代码时,没有做判空处理。即需要改动为,if(block){block()}

BAD_POINTER_COMPARISON

没有判断一个NSNumber类型的对象是不是空?

TAINTED_VALUE_REACHING_SENSITIVE_FUNCTION

代码中使用了cookie的value。可以理解为误报

PARAMETER_NOT_NULL_CHECKED

传参时没有判断是否为null,加一次判断就可以了

STRONG_DELEGATE_WARNING

将一个delegate属性设置为strong的类型。

PREMATURE_NIL_TERMINATION_ARGUMENT

没有判断是否为空

REGISTERED_OBSERVER_BEING_DEALLOCATED

创建一个对象后,监听了某些通知,但是没有在dealloc中释放该通知。项目中出现这种问题的类,基本都是单例,不会被销毁。

参考文档:
使用 Infer 进行代码扫描
iOS开发之使用 infer静态代码扫描工具

上一篇下一篇

猜你喜欢

热点阅读