2014-04-04 45 views
3

我收集像〜/ erl_beam在Erlang光束和源代碼之間使用Dialyzer有沒有效率差異?

dialyzer ~/erl_beam/*.beam --get_warnings -o static_analysis.log 

路徑它運作良好,下一個項目的所有光束文件。

如果我這樣做,對二郎源代碼:

dialyzer --get_warnings -I <Path1> --src <Path2> -o static_analysis.log 

它的工作原理也一樣。

那麼爲什麼我們有兩種方法對Erlang代碼進行靜態分析? 對彼此有強弱之處嗎?

回答

3

Dialyzer從調試編譯的BEAM字節碼或Erlang源代碼開始分析。但是,有幾個選項僅適用於BEAM文件(例如,--build_plt)。

例如,如果您無法訪問源文件,則可能需要使用BEAM文件。如果您有權訪問BEAM和源文件,則可能需要使用BEAM文件,因爲這會稍微加快分析速度:Dialyzer將花費更少的時間解析其輸入。另一方面,解析需要的時間比其餘的分析要少得多,所以不要指望看到很多差異(如果超過10%,我會感到驚訝)。

除此之外,AFAIK,Dialyzer在這兩種情況下執行的分析類型沒有區別。

9

非常小。

透析器分析是在Core Erlang上執行的。該表示可以從+debug_info編譯的.beam文件中直接提取,或者通過編譯.erl文件來提取。編譯需要時間,但它當然不是分析中最耗時的部分。

如果您已經編譯了.erl+debug_info它是分析所產生的.beam文件,因爲你不會有通過任何編譯相關的命令行選項來透析器更方便。

相關問題