当用于分析时,Dialyzer将正确的.plt文件视为无效

时间:2014-06-03 16:30:02

标签: erlang ejabberd dialyzer

我使用以下命令为ejabberd和标准库构建了.plt文件:

$ dialyzer --build_plt --apps kernel stdlib erts mnesia eunit -o ./dialyzer/ejabberd.plt /path/to/ejabberd/repository/ebin/*.beam

生成文件的手动检查表明该文件有效:

$ dialyzer --check_plt dialyzer/ejabberd.plt 
  Checking whether the PLT /home/citxx/.dialyzer_plt is up-to-date... yes
done (passed successfully)

但是当我尝试使用此.plt文件检查我的源代码时,会发生以下错误:

$ dialyzer --plts dialyzer/ejabberd.plt ebin/*.beam
  Checking whether the PLT dialyzer/ejabberd.plt is up-to-date...
dialyzer: The file: dialyzer/ejabberd.plt is not a valid PLT file
Use the options:
   --build_plt   to build a new PLT; or
   --add_to_plt  to add to an existing PLT

For example, use a command like the following:
   dialyzer --build_plt --apps erts kernel stdlib mnesia
Note that building a PLT such as the above may take 20 mins or so

If you later need information about other applications, say crypto,
you can extend the PLT by the command:
  dialyzer --add_to_plt --apps crypto
For applications that are not in Erlang/OTP use an absolute file name.

如果标准应用程序不包含在plt文件中,也会发生同样的情况。

这种行为可能是什么原因?

UPD。我使用的是ejabberd 14.05和erlang OTP 17.0。

1 个答案:

答案 0 :(得分:2)

两件事:

  • -o选项不会让Dialyzer将PLT写入给定文件,但分析结果。查看该文件,您将看到它是一个文本文件。您想要的选项是--output_plt
  • --check_plt不接受PLT文件名。请注意,它表示/home/citxx/.dialyzer_plt有效,而不是您引用的文件。您需要将其与--plt--plts参数组合,如下所示:

    dialyzer --check_plt --plts dialyzer/ejabberd.plt