[Erlang03]Erlang有哪些好用的靜態分析工具?

寫著寫著就懂了發表於2014-05-09

1. dialyzer

  Dialyzer starts its analysis from either debug-compiled BEAM bytecode or from Erlang source code.

  Dialyzer 可以分析*.erl和有debug-info的BEAM, Dialyzer提供GUICommand 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.悲傷

相關文章