Erlang 二郎:透析器对于一个大项目来说非常慢

Erlang 二郎:透析器对于一个大项目来说非常慢,erlang,dialyzer,Erlang,Dialyzer,这是一个大的Erlang项目,有大约100个模块。我正在这个项目中实施一个新的模块,透析器对项目进行一次完整检查所需的时间令我震惊。在我的机器上运行makedialyzer大约需要200秒,这对于执行更改时的频繁测试来说是无法忍受的 make dialyzer运行以下命令启动透析器: /usr/lib/erlang/bin/dialyzer -Dtid_not_builtin -Dwith_export_type_support \ -DNO_FILE_SENDFILE -Dh

这是一个大的Erlang项目,有大约100个模块。我正在这个项目中实施一个新的模块,透析器对项目进行一次完整检查所需的时间令我震惊。在我的机器上运行
makedialyzer
大约需要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个文件。假设在后续运行之间只有一个模块要更换,有没有更好的方法来加快透析器的速度?

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

dialyzer --add_to_plt <unchanged modules>
<代码>透析器-向plt中添加 如果您有一台多核机器,您可能还想使用Erlang R15B02(在我写这篇文章的时候没有发布,但是可以在的“maint”分支上构建),它有一个并行版本的透析器