在Erlang梁上使用Dialyzer和源代码之间有效率差异吗?

boe*_*eam 3 erlang dialyzer

我在〜/ erl_beam这样的路径下收集项目的所有梁文件

dialyzer ~/erl_beam/*.beam --get_warnings -o static_analysis.log
Run Code Online (Sandbox Code Playgroud)

它运作良好.

如果我在Erlang源代码上执行此操作:

dialyzer --get_warnings -I <Path1> --src <Path2> -o static_analysis.log
Run Code Online (Sandbox Code Playgroud)

它也有效.

那么为什么我们有两种方法对Erlang代码进行静态分析呢?彼此有任何优点或弱点吗?

aro*_*tav 9

很小.

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

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