我可以告诉Dialyzer忽略一些模块吗?

时间:2014-01-20 16:35:24

标签: erlang dialyzer

我正在使用

构建PLT
dialyzer  --output_plt lib.plt --build_plt --apps stdlib kernel mnesia ssl public_key crypto erts asn1 inets sasl odbc

它在我不关心的模块中吐出一些关于未知函数的错误。例如:

  Compiling some key modules to native code... done in 1m10.81s
  Creating PLT lib.plt ...
Unknown functions:
  compile:file/2
  compile:forms/2
  compile:noenv_forms/2

我可以告诉透析器忽略这些吗?我真的应该关心他们吗?

3 个答案:

答案 0 :(得分:4)

要忽略您不想分析的特定功能的警告,可以在模块中添加:

-dialyzer({nowarn_function, f/0}).

或者这样可以避免模块中的特定警告:

-dialyzer(no_improper_lists).

完整信息:http://erlang.org/doc/man/dialyzer.html#suppression

答案 1 :(得分:2)

您无需关心这些警告。它只是意味着透析器将无法检查调用这些函数的参数类型,因此如果这些函数包含在PLT中,它可能找不到它可以找到的一些差异。

要获得更完整的分析,请将compiler添加到您正在构建到PLT中的应用列表中。

答案 2 :(得分:2)

作为这个问题的后续行动,我一直在使用rebar3,就我而言,它的rebar3 dialyzer命令是正确的。 (也就是说,它显示了由我的代码引起的所有警告,并且没有显示不是由我的代码引起的警告。)我认为它的工作原理是为系统模块构建PLT,然后在运行透析器时将其用作输入反对该项目。