2012-08-15 71 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”分支),其中有一个平行版本的透析器。

相关问题