1. dialyzer
Dialyzer starts its analysis from either debug-compiled BEAM bytecode or from Erlang source code.
Dialyzer 可以分析*.erl和有debug-info的BEAM, Dialyzer提供GUI和Command Line兩種模式,推薦使用command line模式.
使用步驟:
1.1 設定PLT(Persitent Lookup Table),用於存放分析結果,推薦建立PLT加入OTP Applications 和你經常使用的Applications時
最少的PLT路徑應該是這樣的:
dialyzer --build_plt -r $ERL_TOP/lib/stdlib/ebin\ $ERL_TOP/lib/kernel/ebin \ $ERL_TOP/lib/mnesia/ebin
Dialyzer 會把PLT放在一個$DIALYZER_PLT目錄下,如果找不到,就會入在$HOME/.dialyzer_plt 這個路徑也可以用—plt 或—output_plt 選項設定。
1.2 分析命令:
%% 可以分析單個檔案,目錄下檔案,或一個Applications >dialyzer test.erl >dialyzer -r Dir >dialyzer -apps Applications
1.3 為什麼會需要這個工具?
Erlang不是一個強型別語言,所以基本上編譯時不會像c++那樣去嚴格檢查函式的輸入輸出型別啊,這帶來的好處就是:
foo(X) when is_integer(X) -> X + 1. foo(X) -> list_to_atom(X).
以上這個例子在其它強型別語言也可以實現,但是總是要自己去騙下編譯器,說這個能過什麼的!!!但是erlang這樣寫函式是很正常的行為,這也是動態編譯帶來的好處之一,
通常的analyzers會盡量保證在執行期間也不會出錯,如果Erlang也這樣做,就會change it semantics. 兩都不可兼得啊!
於是,就有了團隊開發了dialyzer,於是世界和平啦…….
2 coverage
Todo.