比較隱藏的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)
具體使用參數可看文檔