2

我正在尝试使用 dialyxir 通过它提供的混合任务对我的项目运行透析器分析。

我已将它添加到我的依赖项中并按照自述文件进行编译。

当我运行mix dialyxir.plt它时,它没有报告错误,但在没有创建表的情况下退出。

$ mix dialyzer.plt
Starting PLT Core Build ... this will take awhile
dialyzer --build_plt --output_plt /home/vagrant/.dialyxir_core_19_1.3.2.plt --apps erts kernel stdlib crypto public_key -r /usr/local/lib/elixir/bin/../lib/elixir/../eex/ebin /usr/local/lib/elixir/bin/../lib/elixir/../elixir/ebin /usr/local/lib/elixir/bin/../lib/elixir/../ex_unit/ebin /usr/local/lib/elixir/bin/../lib/elixir/../iex/ebin /usr/local/lib/elixir/bin/../lib/elixir/../logger/ebin /usr/local/lib/elixir/bin/../lib/elixir/../mix/ebin
Creating PLT /home/vagrant/.dialyxir_core_19_1.3.2.plt ...

# later

$ ll /home/vagrant
# No file called /home/vagrant/.dialyxir_core_19_1.3.2.plt

# running the mix task errors as expected with no plt

$ mix dialyzer
dialyzer --no_check_plt --plt /home/vagrant/.dialyxir_core_19_1.3.2.plt -Wunmatched_returns -Werror_handling -Wrace_conditions -Wunderspecs /vagrant/_build/dev/lib/ace/ebin

dialyzer: No such file, directory or application: "/home/vagrant/.dialyxir_core_19_1.3.2.plt"

问题是我如何调试这个?

4

2 回答 2

4

就像您在评论中提到的那样,dialyzer直接运行时的完整错误消息包括最后的文本Killed。这是 Linux 的内存不足杀手,因为 VM 只有 ~489MiB 的 RAM,所以会因为使用过多的资源(很可能是 RAM/swap)而杀死进程。dialyzer的 PLT 创建非常占用 CPU/内存,因此增加 RAM(例如 1 或 2GB)应该可以解决此问题。

于 2016-10-06T10:40:50.093 回答
1
mix dialyzer --plt

从dialyxir 0.4.3 开始,命令行选项mix dialyxir.plt返回错误。点语法被上面添加的标志替换。

参考:

于 2017-07-23T19:51:05.457 回答