白盒测试 FaceBook/infer 试玩合集

易寒 · 2015年06月14日 · 最后由 小学徒V 回复于 2016年07月25日 · 3554 次阅读
本帖已被设为精华帖!

什么是 Infer

FaceBook 推出的静态代码扫描工具,类似 Sonar。支持 Java/C/OC,暂时支持 OSX 和 Linux 系统。
在 github 上 5 天时间 2100 个 star,175 个 fork。

实践合集

FaceBook/infer-尝鲜
FaceBook/infer-安装说明
FaceBook/infer-bin 目录下的文件说明
FaceBooK/infer-Mac 下安装 Java 分析环境
FaceBook/infer-分析 OC 文件
FaceBook/infer-分析 C 文件
FaceBook/infer-分析 iOS 项目
FaceBook/infer-分析 C 项目
FaceBook/infer-分析 Java 文件
FaceBook/infer-分析 Android 项目
FaceBook/infer-infer 工作流
FaceBook/infer-inferTraceBugs 命令使用
FaceBook/infer-不同构建系统的支持
FaceBook/infer-linter 静态代码分析
FaceBook/infer-Java 空指针检查器
FaceBook/infer-结果文件结构说明
FaceBook/infer-Debug 模式
FaceBook/infer-InferPrint 命令
FaceBook/infer-infer 捕捉的 bug 类型

总结

从周五晚上知道有这个工具开始,一直到现在,花了整个周末研究这个。刚开始想要用源码安装,然后 opam 安装中间出错,造成了一个目录没生成,也找不到解决方法,由于这个项目刚上线,有关的 troubleshooting 很少,所以就放弃了源码安装,直接下载的安装包。然后尝试 Java-失败,纠结了半天,找 Issue,到现在也没解决,就放弃了,然后从 Android 开始,也失败了,不知道是不是由于 Java 的环境就失败,造成 Android 也失败,好在 OC/C/iOS 都是成功的,我估计 FaceBook 是在 Linux 上搞 Java 和 Android,造成大家在 OS X 上尝试的时候会出一些新问题。然后报告的形式也不是很友好,不容易查看测试结果。

静待 Github 上有关的 Issue 尽快解决。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 30 条回复 时间 点赞

静待大神分析源代码实例

#1 楼 @a00ium 有点困难啊,OCaml 语言没接触过啊

歪个楼
前两天下了个 Facebook,注册账号没成功,然后就没管了,昨天手机提示容量不够了,我一看 Facebook 的大小一下子变成 2.9G 了!过了小半天又一看 3.1G!然后赶紧删了。

牛 B!貌似很强大! 貌似比 sonar 好用很多而且更强大!!把玩一下!

#5 楼 @testly 报告的形式没有 sonar 强大,看 facebook 怎么搞下去吧

build 的速度很慢,花费了有两个多小时

#7 楼 @noshuai build 啥

#8 楼 @doctorq build 被测代码的时间。

易寒 #10 · 2015年06月15日 Author

#9 楼 @noshuai iOS 还是 Android?你的项目大概多少个文件,多少行代码

#9 楼 @noshuai 额。。。两个小时。。。。

易寒 #12 · 2015年06月15日 Author

#11 楼 @monkey 这个要看代码量

#12 楼 @doctorq 额。。话虽如此。。。但无线的东西不太可能

易寒 #14 · 2015年06月15日 Author

#13 楼 @monkey 所以要论证一下,到底是慢在哪,对其有更好的了解.

iOS 1800 左右个文件,不加 infer,正常构建用时 6 分。

易寒 #17 · 2015年06月15日 Author

#16 楼 @noshuai 嗯,谢谢,作为一个数据.说明 infer 的效率可能是个问题.

我 Facebook 的 ID 都忘记了没得搞了

2 楼这个是你自己翻译的?求 Mac 安卓环境下载我得不行了

易寒 #20 · 2015年06月15日 Author

#19 楼 @huchao2307 不需要 facebook id,安卓环境下载,什么意思?直接升级到 22 就可以了。

刚出来相关资料有点少、谢谢大牛分享

我之前很少的了解过这方面的资料,有些疑问:
1.大部分程序员开发环境为 windows
2.直接做单元测试了,用这个的价值在哪里?

易寒 #23 · 2015年07月02日 Author

#22 楼 @284772894

  • 大部分程序员开发环境为 windows?这一观点我不认同啊。用 windows 的原因是因为公司不舍得给你购置 Mac。就算不给你购置 Mac,linux 的环境 也不难吧。而且这种问题你应该问 facebook,你为什么不给我弄 windows。
  • 你了解下 sonar 就知道它的价值在哪

你的问题都是抽象问题,总结起来就是:我为什么要用 infer,其实这个原因我也不知道。我只从技术角度看问题,不从宏观的角度看问题。

centOS 下二进制安装,一直没有安装成功,有详细点的文档吗

Failed to run InferAnalyze binary, exiting

Failed to run InferAnalyze binary, exiting

使用源码安装的整个过程没有报错,在执行的时候也出现这个错误:

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 给出的官方文档,我们发现大部分该执行的命令都已经执行过了,但是有个比较陌生的插件opam,它是单独安装的。
会不会是它有所依赖呢?
顺着这个思路很自然在官方文档中找到了下面这段话

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,这样一切正常,现在正在跑项目中。暂时未研究是什么原因导致的,有兴趣的可以一起去研究讨论。

@doctorq 请问楼主在项目中运用过 infer 检查代码么?我在扫描
android 项目中会报:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe8 in position 2519118: ordinal not in range(128)
ios 项目会报:
AttributeError: 'NoneType' object has no attribute 'encode'

看到 github 上有人反馈好像是编码问题,很难解决

我在 linux 下编译也 遇到失败的问题,o(╯□╰) o

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册