什么是infer
facebook推出的静态代码检测工具,可以检测android和IOS应用的内存泄露和空指针问题。
官方文档
本文解决问题
使用源码安装的整个过程没有报错,在执行的时候会出现这个错误:
Failed to run InferAnalyze binary, exiting
解决过程
Google解决方案大部分反馈结果如下:
About the “Failed to run InferAnalyze binary, exiting” error, you have to compile the binaries of Infer first, please follow the instructions here.
上面的结果让我们先编译infer二进制源码,很奇怪,我们其实进行源码安装的时候已经编译过了,而且没有报错。
按照上面的方式重新执行错误结果一致。
回头想想,为什么大部分结果会让我们回去编译?
重新翻看Facebook给出的infer编译和安装方法,我们发现大部分该执行的命令都已经执行过了,但是有个比较陌生的插件opam,它是单独安装的。
会不会是它有什么依赖呢?
顺着这个思路很自然在infer编译和安装方法中找到了下面这段话:
Install Infer from source without opam
If for some reason you prefer to install Infer’s OCaml dependencies by some means other than opam, you can still compile Infer by running:
./autogen.sh
./configure
make # or make java
# Install Infer into your PATH
export PATH=`pwd`/infer/bin:$PATH
执行上述脚本,注意执行./configure程序报错了,但是结果有很明显的提示让你执行:
opam pin add --yes --no-action .
opam install --deps-only infer
顺着提示继续执行,发现执行opam install –deps-only infer命令的时候又出错了,但是它依然很人性化的提示你执行下列脚本:
opam depext camlp4.4.01+system
执行上述脚本后,将之前执行失败的脚本重新执行,不再出现报错了。
最后make编译会执行很长时间,等编译完成后就可以顺利执行infer静态检测内存泄露和空指针异常了。
注:在我的unbuntu机器上直接make会报错,因为我只关注Android项目,所以执行的是make java,这样一切正常,现在正在跑项目中。暂时未研究是什么原因导致的,有兴趣的可以一起去研究讨论。