前言
大家都知道,代码静态检查是静态软件测试环节中非常重要的一环。它在不需要运行代码的情况下,可直接发现30%至70%的代码缺陷,为我们的软件稳定性提供重要的保障。
而做为代码检查工具,常见的有OCLint、Klocwork、Xcode中的Analyze等。除此之外,今天给大家推荐一款用于App开发中使用简单且功能强大的静态分析工具——infer。
Infer概述
infer源于FaceBook的开源项目,是一款用OCaml语言实现的静态程序分析工具。目前支持Java、C/C++、Object-C等多种语言的静态分析。在安卓应用开发、iOS应用开发中,是一款不可多得的好工具。它不仅能发现诸如空指针访问的异常,还能检查出资源、内存泄漏等隐患,避免App崩溃,提高App的稳定性。
同样地,在实际项目中,我们都有体会:通常被一些莫名其妙的崩溃问题搅得焦头烂额,特别是一些捕获不到Crash堆栈信息的崩溃问题尤其烫手。而这类捕获不到Crash堆栈信息的崩溃问题,其中有一大部分是由内存泄漏引起的,其出现具有很大的随机性和偶然性,靠动态测试不容易发现,即便发现后也不容易定位解决。因此,运用infer工具事先进行代码静态分析,找出隐患并解决,是一个降低此类崩溃问题概率的有效手段。
下面介绍下infer的安装和使用
infer安装方法
源码安装
首先访问如下链接,
https://github.com/facebook/infer下载完整的infer源码。
在源码中介绍了利用源码编译安装infer的方法(具体:根目录下的INSTALL.md文件)。infer可支持在Mac OS和Linux环境下利用源码编译安装。但是官方推荐直接使用其发布的可执行程序来安装。
可执行程序安装
访问以下链接
https://github.com/facebook/infer/releases?spm=a2c6h.12873639.article-detail.6.ab78188a85imH0将对应的可执行文件下载到本地,并解压。同时建议将其根目录下的bin目录添加到PATH环境变量中,这样就可以直接执行infer命令不需要每次在终端输入infer可执行文件完整的路径,方便很多。安装成功后,在终端输入命令infer --version,可得到如下信息,
至此,infer就安装成功。
infer使用
infer支持指定单个文件扫描和整个工程文件的扫描。这里以iOS开发为例,
(1)指定单个文件扫描,在终端执行命令
infer run -- clang -c Hello.m执行完毕,扫描结果在同一级目录下新生成的infer-out目录下。
(2)指定整个工程扫描
以infer源码包./examples/ios_hello目录下的样例工程为例,
可在终端进入该目录,执行如下命令:
infer run -- xcodebuild -target HelloWorldApp -configuration Debug -sdk iphonesimulatorHelloWorldApp 为需要扫描的工程名。执行命令完后,扫描结果在新生成的infer-out目录下。
infer结果分析
打开上述截图中的report.txt文件,就可以看到如下的内容:
其中,清晰地罗列了扫描发现的问题条目以及错误类型,具体到有问题的文件路径,行数,变量名,错误描述等,一目了然。接下来开发同学只需要照着问题列表,逐个修改,然后再次扫描验证即可,下面枚举常见的错误类型。
最后,infer不仅可以运用在个人本地代码的扫描,也可以集成到Jenkins中作为打包流水线检查的一个环节。对开发团队成员提交的代码进行扫描,infer不仅支持全量扫描,也可以支持增量扫描,通过在Jenkins中集成,能更快更方便的发现问题。
另外要说明下,使用infer,对个人开发水平的提升、产品稳定性、健壮性的提升都有极大的好处。有兴趣的朋友不妨尝试。
| 留言与评论(共有 0 条评论) “” |