2012-08-15 45 views
4

Scalaris key-value store是一個大型的Erlang項目,有100個模塊。我正在這個項目中實施一個新模塊,並且透析器需要多長時間來完成項目的一個完整檢查。在我的機器上運行make dialyzer大約需要200秒,這對於頻繁測試和實施更改而言是不堪忍受的。Erlang:透析器對於大項目來說已經很慢了

make dialyzer運行以下命令來啓動透析:

/usr/lib/erlang/bin/dialyzer -Dtid_not_builtin -Dwith_export_type_support \ 
     -DNO_FILE_SENDFILE -Dhave_cthooks_support -Dhave_callback_support \ 
     -Werror_handling -Wrace_conditions -Wunmatched_returns -I include/ \ 
     -I contrib/yaws/include/ -I contrib/log4erl/include/ \ 
     --src -c src src/*/ test/unittest_helper.erl test/tester*.erl \ 
          test/mockup*.erl test/erl_id_trans.erl \ 
          test/measure_util.erl test/scalaris_cth.erl \ 
     --no_native 

我想我應該可以只包括需要我在--src參數列表模塊中的文件,但該名單可能是相當大的並歸結爲包含90個給定的100個文件。有沒有更好的方法來加速透析器,假設只有一個模塊將在後續運行之間改變?

回答

3

如果其餘模塊在更改模塊中沒有呼叫,則可以將它們添加到PLT中,並且不會每次都檢查它們。但是,如果他們確實有呼叫,如果您更改更改模塊中的代碼,則無法確保這些呼叫的結果相同。

dialyzer --add_to_plt <unchanged modules> 

如果你有一個多核機器,你也可能需要使用Erlang的R15B02(在我寫這篇文章的時候沒有公佈,但可供建設上https://github.com/erlang/otp的「MAINT」分支),其中有一個平行版本的透析器。

相關問題