5

Scalaris键值存储是一个包含约 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 个文件。有没有更好的方法来加快速度假设在后续运行之间只有一个模块会发生变化?

4

1 回答 1

4

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

dialyzer --add_to_plt <unchanged modules>

如果你有一台多核机器,你可能还想使用 Erlang R15B02(在我写这篇文章的时候还没有发布,但可以在https://github.com/erlang/otp的“maint”分支上构建) ,它有一个并行版本的 Dialyzer。

于 2012-08-15T12:21:00.247 回答