Infer:快速拦住空指针和资源泄漏的静态分析工具
【免费下载链接】inferA static analyzer for Java, C, C++, and Objective-C项目地址: https://gitcode.com/gh_mirrors/infer/infer
Infer 覆盖 Java、C、C++ 和 Objective-C 的静态分析工具,编译前把 bug 拦下来。
为什么需要它
靠人眼逐行盯空指针检查和资源释放,迟早漏掉一条,而漏掉的那条常是线上崩溃的源头。静态分析工具 Infer 在编译阶段就把NULL_DEREFERENCE、RESOURCE_LEAK、MEMORY_LEAK先跑出来,让问题拦在合入之前。
从 0 到跑通
把工具装进环境
官方有二进制包最省事,从源码构建更可控。这里给源码这条路:
git clone https://gitcode.com/gh_mirrors/infer/infer infer && cd infer # 拉源码 ./build-infer.sh java # 编译 Java 分析器,并自动装好所需 OCaml 依赖装到系统里跑sudo make install,或者把infer/bin加进PATH,infer命令就能直接用。源码安装的完整细节在 INSTALL.md。
执行第一次分析
装好了,然后呢?仓库自带例子(见 examples/),直接对着它跑:
infer run -- javac examples/Hello.java你会看到Hello.java:5: error: NULL_DEREFERENCE,下一行说明s在第 4 行被赋了 null、第 5 行又解引用。
实际用起来什么样
拿这个例子走一遍闭环:examples/Hello.java里写着String s = null; return s.length();,第一次跑 Infer 就报空指针。把方法体改成s == null ? 0 : s.length(),再跑一次infer run -- javac examples/Hello.java。这次输出变成No issues found,同一个 bug 确认被拦下了。
增量构建系统第二次几乎不重新编译,Infer 抓不到新文件就白跑。加--reactive让它只重看改过的部分,或者干脆每次make clean再分析,别指望增量产物帮你省掉这一步。
报告出来的问题要逐条过,空指针、资源泄漏优先修,修完立刻重跑确认No issues found。别一股脑把告警当噪音关掉,那样静态分析就形同虚设。
和这些工具搭着用更顺手
- Docker:仓库
docker/里有现成 Dockerfile,不想折腾本机环境就直接在容器里跑 Infer。 - Buck:Facebook 的构建系统,仓库里依赖的 Java 工程都带
BUCK文件,Infer 可以挂在它的构建上做分析。 - OCaml / opam:Infer 本身用 OCaml 写,
./build-infer.sh时用 opam 自动装 OCaml 依赖,从源码构建基本不用手动配环境。
clone 下来跑一遍infer run -- javac examples/Hello.java,半小时后空指针自己会现形。
【免费下载链接】inferA static analyzer for Java, C, C++, and Objective-C项目地址: https://gitcode.com/gh_mirrors/infer/infer
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考