4

我在 ~/erl_beam 之类的路径下收集项目的所有光束文件

dialyzer ~/erl_beam/*.beam --get_warnings -o static_analysis.log

它运作良好。

如果我在 Erlang 源代码上这样做:

dialyzer --get_warnings -I <Path1> --src <Path2> -o static_analysis.log

它也有效。

那么为什么我们有两种方法对 Erlang 代码进行静态分析呢?彼此之间有什么优势或劣势吗?

4

2 回答 2

9

很小。

在 Core Erlang 上执行透析器分析。这种表示可以直接从+debug_info编译.beam文件中提取,也可以通过编译文件来提取.erl。编译需要时间,但它当然不是分析中最耗时的部分。

如果您已经编译了您.erl的文件,那么+debug_info分析生成的文件也更方便.beam,因为您不必将任何与编译相关的命令行选项传递给 Dialyzer。

于 2014-04-04T10:14:58.567 回答
3

Dialyzer 从调试编译的 BEAM 字节码或 Erlang 源代码开始分析。但是,有几个选项仅适用于 BEAM 文件(例如,--build_plt)。

例如,如果您无权访问源文件,则可能需要使用 BEAM 文件。如果您可以同时访问 BEAM 和源文件,您可能希望使用 BEAM 文件,因为这会稍微加快分析速度:Dialyzer 解析其输入所需的时间要少得多。另一方面,解析花费的时间明显少于分析的其余部分,所以不要期望看到太大的差异(如果超过 10%,我会感到惊讶)。

除此之外,AFAIK,在这两种情况下,Dialyzer 执行的分析类型没有区别。

于 2014-04-04T10:01:52.037 回答