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个文件。是否有更好的方法来加速透析器,假设在后续运行之间只有一个模块会发生变化?
答案 0 :(得分:3)
如果其他模块在更改模块中没有调用,则可以将它们添加到PLT中,并且不会每次都检查它们。但是,如果他们确实有电话,那么如果您更改更改模块中的代码,则无法确保这些调用的结果是相同的。
dialyzer --add_to_plt <unchanged modules>
如果您有多核机器,您可能还想使用Erlang R15B02(在我写这篇文章时尚未发布,但可用于构建https://github.com/erlang/otp的'maint'分支), Dialyzer的并行版本。