erlang的静态分析dialyzer使用

比较隐藏的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) 

具体使用参数可看文档

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章