4

我正在使用构建 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

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

4

3 回答 3

6

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

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

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

-dialyzer(no_improper_lists).

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

于 2017-06-14T12:49:59.193 回答
3

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

要进行更完整的分析,请添加compiler到您正在构建到 PLT 中的应用程序列表。

于 2014-01-20T16:58:20.683 回答
2

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

于 2015-07-20T23:18:59.680 回答