Erlang:dialyzer对于一个大项目来说已经慢了

时间:2012-08-15 09:58:56

标签: erlang dialyzer

Scalaris key-value store是一个有大约100个模块的大型Erlang项目。我正在这个项目中实施一个新模块,我很震惊透析器对项目进行一次完整的检查需要多长时间。在我的机器上运行make dialyzer需要大约200秒,这在实施更改时经常进行测试是无法忍受的。

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的参数列表中包含我的模块所需的文件,但该列表可能非常大,并且归结为包含给定100的90个文件。是否有更好的方法来加速透析器,假设在后续运行之间只有一个模块会发生变化?

1 个答案:

答案 0 :(得分:3)

如果其他模块在更改模块中没有调用,则可以将它们添加到PLT中,并且不会每次都检查它们。但是,如果他们确实有电话,那么如果您更改更改模块中的代码,则无法确保这些调用的结果是相同的。

dialyzer --add_to_plt <unchanged modules>

如果您有多核机器,您可能还想使用Erlang R15B02(在我写这篇文章时尚未发布,但可用于构建https://github.com/erlang/otp的'maint'分支), Dialyzer的并行版本。