Erlang Dialyzer

依赖类型及函数约束规范的代码静态类型分析工具

Dialyzer是Erlang的代码静态类型分析工具,可以用来检查一些编译器检查不出来,但是运行会报错的代码,比如被调用的函数不存在或者未导出…
Dialyzer可以检查.beam文件,也可以检查Erlang源文件,但是检查.beam文件更快。
Dialyzer的用法很简单,只有三步:建立PLT文件,编译代码,运行检查。
本节只介绍Dialyzer的基础用法,关于Dialyzer的更多内容参见dialyzer --help命令或者Erlang官方文档

建立PLT文件

PLT文件是Dialyzer使用的代码规则记录,或者说是索引,需要把几个常用的Erlang系统库添加到PLT文件中就可以了
首先要确保Erlang已经被正确安装,然后Dialyzer对Windows的CMD不是很友好,Windows下可以使用MINGW64终端,另外Dialyzer默认生成PLT文件的位置是在$HOME目录下,确定$HOME环境变量已被正确设置
建立PLT文件的命令是:
dialyzer --build_plt --apps erts kernel stdlib
这里只添加了kernel stdlib erts三个标准库,如果发现已经建立的PLT文件中漏了某些库,可以使用--add_to_plt添加
dialyzer --add_to_plt --apps ssl eunit

编译代码

编译.beam文件时要加上debug_info参数

运行检查

进入.beam文件所在的目录 e.g.dialyzer .
或者检查某个.beam文件 e.g.dialyzer "filename.beam"
可以将检查结果指定写入某个文件 -o参数 e.g.dialyzer . -o ../log/dialyzer_result.log

1
2
3
4
# 在命令行中Dialyzer运行检查表达式,返回值有3种状态
# 0 表示在检查过程中没有发现问题,也没有警告
# 1 表示在检查过程中发现了问题
# 2 表示在检查过程中没有发现问题,但发出了警告