非常教程

Erlang 20参考手册

透析器 | dialyzer

1.透析器 | 1. Dialyzer

1.1游戏攻略

范围

Dialyzer是一款静态分析工具,用于识别单个Erlang模块或整个(一套)应用程序中的软件差异,例如明确的类型错误,因编程错误而死机或无法访问的代码以及不必要的测试。

透析器可以从命令行,Erlang和GUI中调用。

先决条件

假定读者熟悉Erlang编程语言。

1.2持久查找表

透析器将分析结果存储在持久查询表(PLT)中。PLT可以作为以后分析的起点。建议您使用您正在使用的Erlang / OTP应用程序构建PLT,但也包括您经常使用的自己的应用程序。

PLT是使用--build_pltDialyzer的选项构建的。以下命令为Erlang / OTP构建推荐的最小PLT:

dialyzer --build_plt --apps erts kernel stdlib mnesia

透析器会查看是否有环境变量调用DIALYZER_PLT并将PLT放置在此位置。如果没有设置这样的变量,Dialyzer将PLT放在$HOME/.dialyzer_plt。展示位置也可以使用选项--plt--output_plt

信息可以添加到现有的PLT使用选项--add_to_plt。如果您还想在PLT中包含Erlang编译器并将其放入新的PLT中,请使用以下命令:

dialyzer --add_to_plt --apps compiler --output_plt my.plt

然后,您可以将您最喜爱的应用程序my_app添加到新的PLT中:

dialyzer --add_to_plt --plt my.plt -r my_app/ebin

但是你意识到在这个Erlang编译器中是没有必要的:

dialyzer --remove_from_plt --plt my.plt --apps compiler

稍后,当您修复应用程序my_app中的错误时,您需要更新PLT,以便在下次运行Dialyzer时变得新鲜。在这种情况下,运行以下命令:

dialyzer --check_plt --plt my.plt

透析器然后重新分析已更改的文件和依赖这些文件的文件。请注意,下次使用此PLT运行Dialyzer时,会自动执行此一致性检查。选项--check_plt仅用于这样做,而不进行任何其他分析。

若要获取有关PLT的信息,请使用以下选项:

dialyzer --plt_info

要指定哪个PLT,请使用选项--plt

要将输出打印到文件,请使用选项--output_file

请注意,在操作PLT时,不会发出警告。要在PLT(重新)分析期间打开警告,请使用选项--get_warnings

1.3使用指挥线的透析器

Dialyzer有一个用于自动化使用的命令行版本。看dialyzer(3)

1.4使用Erlang的透析器

透析器也可以直接从Erlang使用。看dialyzer(3)

1.5使用GUI中的透析器

选择应用程序或模块

文件窗口显示当前目录的列表。点击你想要添加的目录/模块,或者在条目中输入正确的路径。

标记您想分析差异的目录/模块,然后单击添加。您可以直接添加.beam.erl文件,或者添加包含这些类型文件的目录。请注意,您只允许添加可在当前的操作模式进行分析的文件类型(见下文),而且你不能混用.beam.erl文件。

分析模式

透析器有两种分析模式:“字节代码”和“源代码”。它们由分析选项下的主窗口顶部中间部分的按钮控制。

控制透析器报告的差异

在“ 警告”下拉菜单中,有一些按钮可控制在“ 警告”窗口中向用户报告哪些差异。通过点击这些按钮,您可以启用/禁用整组警告。有关警告类别的信息可在帮助菜单下的“警告”项目中找到(位于最右上角)。

如果使用内联编译模块,则可能会发出虚假警告。在选项菜单中,您可以选择在分析字节码时忽略内嵌编译的模块。从源代码开始时,这不是问题,因为内联是由Dialyzer明确关闭的。该选项使Dialyzer禁止内嵌编译模块发出的所有警告,因为Dialyzer目前没有办法找到通过内联生成代码的哪些部分。

运行分析

一旦你选择了你想分析的模块或目录,点击运行按钮开始分析。如果您出于某种原因想要在运行时停止分析,请单击停止按钮。

来自分析的信息显示在日志窗口和警告窗口中。

包括目录和宏定义

当从源代码分析,您可能必须与列表供应透析器包括目录和宏定义(你可以用做erlc标志-I-D)。这可以通过从命令行启动带有这些标志的Dialyzer完成,如下所示:

dialyzer -I my_includes -DDEBUG -Dvsn=42 -I one_more_dir

或者使用“ 选项”菜单中的子菜单“ 管理宏定义”或“ 管理包含目录”来明确添加这些内容。

在“日志和警告”窗口中保存信息

文件”菜单包含用于保存“ 日志”窗口和“ 警告”窗口内容的选项。只需选择选项并输入文件以保存内容。

还有按钮可以清除每个窗口的内容。

检验解析函数的推断类型

透析器将分析的功能的信息存储在持久查询表(PLT)中,请参见部分The Persistent Lookup Table

分析后,您可以检查这些信息。在PLT菜单中,您可以选择搜索PLT或检查整个PLT的内容。信息以EDoc格式呈现。

1.6次反馈和错误报告

我们非常欢迎用户反馈 - 即使是希望列表!如果您发现任何奇怪的事情,特别是如果Dialyzer报告任何误报为误报,请发送描述症状的错误报告以及如何重现它们。

透析器 | dialyzer相关

Erlang 20

Erlang 是一种通用的面向并发的编程语言,可应付大规模开发活动的程序设计语言和运行环境。

主页 https://www.erlang.org/
源码 https://github.com/erlang/otp
版本 20
发布版本 20.1