比较隐藏的erlang代码的bug,可以使用dialyzer分析找出。
环境:windows系统下的使用,erlang8.0
使用dialyzer工具前需要先构建plt
官方文档:http://erlang.org/doc/man/dialyzer.html
一. 构建plt,包含了以下llib:erts, kernel, stdlib, ERL_TOP为erlang的安装目录(我是F:/erlang/erl8.0/)。
进入到自定义plt所缓存的文件位置:我是放在F:/erlangtest/dialyzer/,执行以下cmd命令
dialyzer --build_plt -r ERL_TOP\lib\erts-8.0\ebin
ERL_TOP\lib\kernel-5.0\ebin
ERL_TOP\lib\stdlib-3.0\ebin
(多个lib之间用空格即可,具体的lib版本以自身版本为主)
大概几分钟就完成;在F:/erlangtest/dialyzer/下就生成了一个 ~/.dialyzer_plt文件。
报错处理:第一次运行可能报以下错
,
解决方法:(推荐方法2。方法1则每次重新打开cmd,执行dialyzer命令,都需要set一下)
方法1.
定义下HOME指定到缓存文件的位置,F:/erlangtest/dialyzer/
设置Home:set HOME=文件缓存位置(f:\erlangtest\dialyzer)
输出查看:echo %HOME%
方法2.
新建新的系统变量:我的电脑-》属性-》高级系统设置-》环境变量-》新建变量
再执行一下第一步的cmd命令,到这里,plt构建就大功告成啦,接下来就可以使用。
补充: 增加lib应用,dialyzer --add_to_plt --plt .dialyzer_plt -c ERL_TOP/lib/应用版本/ebin
移除lib应用,dialyzer --remove_from_plt --plt .dialyzer_plt -c ERL_TOP/lib/应用版本/ebin
二. dialyzer静态分析常使用:(注意如果是检测beam文件,编译时要debug_info模式,不然会获取不了abstract code,分析不了)
1.检测整个文件夹下包括子目录:dialyzer --src -r 文件夹名
2.检测单个文件 :dialyzer -c 文件名.beam
3.引入文件并检测文件夹下和子目录下:dialyzer -I include --src -r 文件夹名 (其中inlucde就是文件名,文件可以是.erl或.beam)
具体使用参数可看文档