From 9f1f9179fb02fd2381e01c7960c082182176fabe Mon Sep 17 00:00:00 2001 From: xsipewe Date: Wed, 21 Sep 2016 12:50:46 +0200 Subject: Update Dialyzer documentation Language cleaned up by the technical writer xsipewe from Combitech. Proofreading and corrections by Hans Bolinder. --- lib/dialyzer/doc/src/dialyzer.xml | 828 ++++++++++++++++++++++---------------- 1 file changed, 481 insertions(+), 347 deletions(-) (limited to 'lib/dialyzer/doc/src/dialyzer.xml') diff --git a/lib/dialyzer/doc/src/dialyzer.xml b/lib/dialyzer/doc/src/dialyzer.xml index 619db125b1..553bfef41b 100644 --- a/lib/dialyzer/doc/src/dialyzer.xml +++ b/lib/dialyzer/doc/src/dialyzer.xml @@ -4,7 +4,7 @@
- 20062015 + 20062016 Ericsson AB. All Rights Reserved. @@ -25,341 +25,477 @@ dialyzer - + 2016-09-20 + dialyzer.xml
dialyzer - The Dialyzer, a DIscrepancy AnalYZer for ERlang programs + Dialyzer, a DIscrepancy AnaLYZer for ERlang programs. + -

The Dialyzer is a static analysis tool that identifies software - discrepancies such as definite type errors, code which has become - dead or unreachable due to some programming error, unnecessary - tests, etc. in single Erlang modules or entire (sets of) - applications. Dialyzer starts its analysis from either - debug-compiled BEAM bytecode or from Erlang source code. The file - and line number of a discrepancy is reported along with an - indication of what the discrepancy is about. Dialyzer bases its - analysis on the concept of success typings which allows for sound - warnings (no false positives).

-

Read more about Dialyzer and about how to use it from the GUI - in Dialyzer User's - Guide.

+

Dialyzer is a static analysis tool that identifies software + discrepancies, such as definite type errors, code that has become dead + or unreachable because of programming error, and unnecessary tests, + in single Erlang modules or entire (sets of) applications.

+ +

Dialyzer starts its analysis from either + debug-compiled BEAM bytecode or from Erlang source code. The file + and line number of a discrepancy is reported along with an + indication of what the discrepancy is about. Dialyzer bases its + analysis on the concept of success typings, which allows for sound + warnings (no false positives).

- Using the Dialyzer from the command line -

Dialyzer also has a command line version for automated use. Below is a - brief description of the list of its options. The same information can - be obtained by writing

- - dialyzer --help -

in a shell. Please refer to the GUI description for more details on - the operation of Dialyzer.

-

The exit status of the command line version is:

+ + Using Dialyzer from the Command Line +

Dialyzer has a command-line version for automated use. This + section provides a brief description of the options. The same information + can be obtained by writing the following in a shell:

+ - 0 - No problems were encountered during the analysis and no - warnings were emitted. - 1 - Problems were encountered during the analysis. - 2 - No problems were encountered, but warnings were emitted. -

Usage:

+dialyzer --help + +

For more details about the operation of Dialyzer, see section + + Using Dialyzer from the GUI in the User's Guide.

+ +

Exit status of the command-line version:

+ + + 0 + +

No problems were found during the analysis and no warnings were + emitted.

+
+ 1 + +

Problems were found during the analysis.

+
+ 2 + +

No problems were found during the analysis, but warnings were + emitted.

+
+
+ +

Usage:

+ - dialyzer [--help] [--version] [--shell] [--quiet] [--verbose] - [-pa dir]* [--plt plt] [--plts plt*] [-Ddefine]* - [-I include_dir]* [--output_plt file] [-Wwarn]* [--raw] - [--src] [--gui] [files_or_dirs] [-r dirs] - [--apps applications] [-o outfile] - [--build_plt] [--add_to_plt] [--remove_from_plt] - [--check_plt] [--no_check_plt] [--plt_info] [--get_warnings] - [--dump_callgraph file] [--no_native] [--fullpath] - [--statistics] [--no_native_cache] -

Options:

+dialyzer [--add_to_plt] [--apps applications] [--build_plt] + [--check_plt] [-Ddefine]* [-Dname] [--dump_callgraph file] + [files_or_dirs] [--fullpath] [--get_warnings] [--gui] [--help] + [-I include_dir]* [--no_check_plt] [--no_native] + [--no_native_cache] [-o outfile] [--output_plt file] [-pa dir]* + [--plt plt] [--plt_info] [--plts plt*] [--quiet] [-r dirs] + [--raw] [--remove_from_plt] [--shell] [--src] [--statistics] + [--verbose] [--version] [-Wwarn]* + + +

* denotes that multiple occurrences of the option are possible.

+
+ +

Options:

+ - (for backwards compatibility also - as: ) - Use Dialyzer from the command line to detect defects in the - specified files or directories containing or - files, depending on the type of the - analysis. - - Same as the previous but the specified directories are searched - recursively for subdirectories containing or - files in them, depending on the type of - analysis. - - Option typically used when building or modifying a plt as in: + --add_to_plt + +

The PLT is extended to also include the files specified with + -c and -r. Use + --plt to specify which PLT to start from, + and --output_plt to specify where to put the PLT. + Notice that the analysis possibly can include files from the PLT if + they depend on the new files. This option only works for BEAM + files.

+
+ --apps applications + +

This option is typically used when building or modifying a PLT as + in:

- dialyzer --build_plt --apps erts kernel stdlib mnesia ... - to conveniently refer to library applications corresponding to the - Erlang/OTP installation. However, the option is general and can also - be used during analysis in order to refer to Erlang/OTP applications. - In addition, file or directory names can also be included, as in: +dialyzer --build_plt --apps erts kernel stdlib mnesia ... +

to refer conveniently to library applications corresponding to the + Erlang/OTP installation. However, this option is general and can also + be used during analysis to refer to Erlang/OTP applications. + File or directory names can also be included, as in:

- dialyzer --apps inets ssl ./ebin ../other_lib/ebin/my_module.beam
- (or - ) - When using Dialyzer from the command line, send the analysis - results to the specified outfile rather than to stdout. - - When using Dialyzer from the command line, output the raw analysis - results (Erlang terms) instead of the formatted result. The raw format - is easier to post-process (for instance, to filter warnings or to - output HTML pages). - - Override the default, which is to analyze BEAM files, and - analyze starting from Erlang source code instead. - (or ) - When analyzing from source, pass the define to Dialyzer. (**) - - When analyzing from source, pass the - to Dialyzer. (**) - - Include in the path for Erlang (useful when - analyzing files that have - directives). - - Store the plt at the specified file after building it. - - Use the specified plt as the initial plt (if the plt was built - during setup the files will be checked for consistency). - - Merge the specified plts to create the initial plt -- requires - that the plts are disjoint (i.e., do not have any module - appearing in more than one plt). - The plts are created in the usual way: +dialyzer --apps inets ssl ./ebin ../other_lib/ebin/my_module.beam + + --build_plt + +

The analysis starts from an empty PLT and creates a new one from + the files specified with -c and + -r. This option only works for BEAM files. + To override the default PLT location, use + --plt or --output_plt.

+
+ --check_plt + +

Check the PLT for consistency and rebuild it if it is not + up-to-date.

+
+ -Dname (or -Dname=value) + +

When analyzing from source, pass the define to Dialyzer. + (**)

+
+ --dump_callgraph file + +

Dump the call graph into the specified file whose format is + determined by the filename extension. Supported extensions are: + raw, dot, and ps. If something else is used as + filename extension, default format .raw is used.

+
+ files_or_dirs (for backward compatibility also + as -c files_or_dirs) + +

Use Dialyzer from the command line to detect defects in the + specified files or directories containing .erl or + .beam files, depending on the type of the + analysis.

+
+ --fullpath + +

Display the full path names of files for which warnings are + emitted.

+
+ --get_warnings + +

Make Dialyzer emit warnings even when manipulating the PLT. + Warnings are only emitted for files that are analyzed.

+
+ --gui + +

Use the GUI.

+ --help (or -h) + +

Print this message and exit.

+
+ -I include_dir + +

When analyzing from source, pass the include_dir + to Dialyzer. (**)

+
+ --no_check_plt + +

Skip the PLT check when running Dialyzer. This is useful when + working with installed PLTs that never change.

+
+ --no_native (or -nn) + +

Bypass the native code compilation of some key files that + Dialyzer heuristically performs when dialyzing many files. + This avoids the compilation time, but can result in (much) longer + analysis time.

+
+ --no_native_cache + +

By default, Dialyzer caches the results of native compilation + in directory $XDG_CACHE_HOME/erlang/dialyzer_hipe_cache. + XDG_CACHE_HOME defaults to $HOME/.cache. + Use this option to disable caching.

+
+ -o outfile (or + --output outfile) + +

When using Dialyzer from the command line, send the analysis + results to the specified outfile rather than to stdout.

+
+ --output_plt file + +

Store the PLT at the specified file after building it.

+
+ -pa dir + +

Include dir in the path for Erlang. This is useful + when analyzing files that have -include_lib() + directives.

+
+ --plt plt + +

Use the specified PLT as the initial PLT. If the PLT was built + during setup, the files are checked for consistency.

+
+ --plt_info + +

Make Dialyzer print information about the PLT and then quit. + The PLT can be specified with --plt(s).

+
+ --plts plt* + +

Merge the specified PLTs to create the initial PLT. This requires + that the PLTs are disjoint (that is, do not have any module + appearing in more than one PLT). + The PLTs are created in the usual way:

- dialyzer --build_plt --output_plt plt_1 files_to_include - ... - dialyzer --build_plt --output_plt plt_n files_to_include - and then can be used in either of the following ways: +dialyzer --build_plt --output_plt plt_1 files_to_include +... +dialyzer --build_plt --output_plt plt_n files_to_include +

They can then be used in either of the following ways:

- dialyzer files_to_analyze --plts plt_1 ... plt_n - or: +dialyzer files_to_analyze --plts plt_1 ... plt_n +

or

- dialyzer --plts plt_1 ... plt_n -- files_to_analyze - (Note the -- delimiter in the second case)
- - A family of options which selectively turn on/off warnings - (for help on the names of warnings use - ). - Note that the options can also be given in the file with a - -dialyzer() attribute. See Requesting or Suppressing Warnings in - Source Files below for details. - - Do not disable the Erlang shell while running the GUI. - (or ) - Print the Dialyzer version and some more information and - exit. - (or ) - Print this message and exit. - (or ) - Make Dialyzer a bit more quiet. - - Make Dialyzer a bit more verbose. - - Prints information about the progress of execution (analysis phases, - time spent in each and size of the relative input). - - The analysis starts from an empty plt and creates a new one from - the files specified with and - . Only works for beam files. Use - or to - override the default plt location. - - The plt is extended to also include the files specified with - and . Use - to specify which plt to start from, - and to specify where to put the plt. - Note that the analysis might include files from the plt if they depend - on the new files. This option only works with beam files. - - The information from the files specified with - and is removed - from the plt. Note that this may cause a re-analysis of the remaining - dependent files. - - Check the plt for consistency and rebuild it if it is not - up-to-date. - - Skip the plt check when running Dialyzer. Useful when working with - installed plts that never change. - - Make Dialyzer print information about the plt and then quit. The - plt can be specified with . - - Make Dialyzer emit warnings even when manipulating the plt. - Warnings are only emitted for files that are actually analyzed. - - Dump the call graph into the specified file whose format is - determined by the file name extension. Supported extensions are: raw, - dot, and ps. If something else is used as file name extension, default - format '.raw' will be used. - (or ) - Bypass the native code compilation of some key files that Dialyzer - heuristically performs when dialyzing many files; this avoids the - compilation time but it may result in (much) longer analysis - time. - - By default, Dialyzer caches the results of native compilation in the - $XDG_CACHE_HOME/erlang/dialyzer_hipe_cache directory. - XDG_CACHE_HOME defaults to $HOME/.cache. - Use this option to disable caching. - - Display the full path names of files for which warnings are emitted. - - Use the GUI. +dialyzer --plts plt_1 ... plt_n -- files_to_analyze +

Notice the -- delimiter in the second case.

+
+ --quiet (or -q) + +

Make Dialyzer a bit more quiet.

+
+ -r dirs + +

Same as files_or_dirs, but the specified + directories are searched + recursively for subdirectories containing .erl or + .beam files in them, depending on the type of + analysis.

+
+ --raw + +

When using Dialyzer from the command line, output the raw + analysis results (Erlang terms) instead of the formatted result. + The raw format + is easier to post-process (for example, to filter warnings or to + output HTML pages).

+
+ --remove_from_plt + +

The information from the files specified with + -c and -r is removed from + the PLT. Notice that this can cause a reanalysis of the remaining + dependent files.

+
+ --shell + +

Do not disable the Erlang shell while running the GUI.

+
+ --src + +

Override the default, which is to analyze BEAM files, and + analyze starting from Erlang source code instead.

+
+ --statistics + +

Print information about the progress of execution (analysis phases, + time spent in each, and size of the relative input).

+
+ --verbose + +

Make Dialyzer a bit more verbose.

+
+ --version (or -v) + +

Print the Dialyzer version and some more information and + exit.

+
+ -Wwarn + +

A family of options that selectively turn on/off warnings. + (For help on the names of warnings, use + dialyzer -Whelp.) + Notice that the options can also be specified in the file with a + -dialyzer() attribute. For details, see section Requesting or Suppressing Warnings in + Source Files.

+
+ -

* denotes that multiple occurrences of these options are possible.

-

** options and work both from command-line and in the Dialyzer GUI; - the syntax of defines and includes is the same as that used by .

+

** options -D and -I work both + from the command line and in the Dialyzer GUI; the syntax of + defines and includes is the same as that used by + erlc(1).

-

Warning options:

+ +

Warning options:

+ - - Suppress warnings for functions that will never return a - value. - - Suppress warnings for unused functions. - - Suppress warnings for construction of improper lists. - - Suppress warnings for fun applications that will fail. - - Suppress warnings for patterns that are unused or cannot - match. - - Suppress warnings for violations of opaqueness of data types. - - Suppress warnings for failing calls. - - Suppress warnings about invalid contracts. - - Suppress warnings about behaviour callbacks which drift from the - published recommended interfaces. - - Suppress warnings about calls to missing functions. - - Suppress warnings about behaviours that have no - -callback attributes for their callbacks. - *** - Include warnings for function calls which ignore a structured return - value or do not match against one of many possible return - value(s). - *** - Include warnings for functions that only return by means of an - exception. - *** - Include warnings for possible race conditions. Note that the - analysis that finds data races performs intra-procedural data flow analysis - and can sometimes explode in time. Enable it at your own risk. - - *** - Warn about underspecified functions - (the -spec is strictly more allowing than the success typing). - *** - Let warnings about unknown functions and types affect the - exit status of the command line version. The default is to ignore - warnings about unknown functions and types when setting the exit - status. When using the Dialyzer from Erlang, warnings about unknown - functions and types are returned; the default is not to return - these warnings. + -Werror_handling (***) + +

Include warnings for functions that only return by an exception.

+
+ -Wno_behaviours + +

Suppress warnings about behavior callbacks that drift from the + published recommended interfaces.

+
+ -Wno_contracts + +

Suppress warnings about invalid contracts.

+
+ -Wno_fail_call + +

Suppress warnings for failing calls.

+
+ -Wno_fun_app + +

Suppress warnings for fun applications that will fail.

+
+ -Wno_improper_lists + +

Suppress warnings for construction of improper lists.

+
+ -Wno_match + +

Suppress warnings for patterns that are unused or cannot match.

+
+ -Wno_missing_calls + +

Suppress warnings about calls to missing functions.

+
+ -Wno_opaque + +

Suppress warnings for violations of opaqueness of data types.

+
+ -Wno_return + +

Suppress warnings for functions that will never return a value.

+
+ -Wno_undefined_callbacks + +

Suppress warnings about behaviors that have no + -callback attributes for their callbacks.

+
+ -Wno_unused + +

Suppress warnings for unused functions.

+
+ -Wrace_conditions (***) + +

Include warnings for possible race conditions. Notice that the + analysis that finds data races performs intra-procedural data flow + analysis and can sometimes explode in time. Enable it at your own + risk.

+
+ -Wunderspecs (***) + +

Warn about underspecified functions (the specification is strictly + more allowing than the success typing).

+
+ -Wunknown (***) + +

Let warnings about unknown functions and types affect the + exit status of the command-line version. The default is to ignore + warnings about unknown functions and types when setting the exit + status. When using Dialyzer from Erlang, warnings about unknown + functions and types are returned; the default is not to return + these warnings.

+
+ -Wunmatched_returns (***) + +

Include warnings for function calls that ignore a structured return + value or do not match against one of many possible return + value(s).

+
-

The following options are also available but their use is not - recommended: (they are mostly for Dialyzer developers and internal - debugging)

+ +

The following options are also available, but their use is not + recommended (they are mostly for Dialyzer developers and internal + debugging):

+ - *** - Warn about overspecified functions - (the -spec is strictly less allowing than the success typing). - *** - Warn when the -spec is different than the success typing. + -Woverspecs (***) + +

Warn about overspecified functions (the specification is strictly + less allowing than the success typing).

+
+ -Wspecdiffs (***) + +

Warn when the specification is different than the success typing.

+
+ -

*** Identifies options that turn on warnings rather than - turning them off.

+

*** denotes options that turn on warnings rather than + turning them off.

- Using the Dialyzer from Erlang -

You can also use Dialyzer directly from Erlang. Both the GUI and the - command line versions are available. The options are similar to the ones - given from the command line, so please refer to the sections above for - a description of these.

+ Using Dialyzer from Erlang +

Dialyzer can be used directly from Erlang. Both the GUI and the + command-line versions are also available. The options are similar to the + ones given from the command line, see section + + Using Dialyzer from the Command Line.

Requesting or Suppressing Warnings in Source Files -

- The -dialyzer() attribute can be used for turning off +

Attribute -dialyzer() can be used for turning off warnings in a module by specifying functions or warning options. For example, to turn off all warnings for the function - f/0, include the following line: -

- --dialyzer({nowarn_function, f/0}). - + f/0, include the following line:

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

To turn off warnings for improper lists, add the following line - to the source file: -

- --dialyzer(no_improper_lists). - -

The -dialyzer() attribute is allowed after function - declarations. Lists of warning options or functions are allowed: -

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

- Warning options can be restricted to functions: -

- --dialyzer({no_improper_lists, g/0}). - - --dialyzer({[no_return, no_match], [g/0, h/0]}). - -

- For help on the warning options use dialyzer -Whelp. The - options are also enumerated below (WarnOpts). -

+ to the source file:

+ + +-dialyzer(no_improper_lists). + +

Attribute -dialyzer() is allowed after function + declarations. Lists of warning options or functions are allowed:

+ + +-dialyzer([{nowarn_function, [f/0]}, no_improper_lists]). + +

Warning options can be restricted to functions:

+ + +-dialyzer({no_improper_lists, g/0}). + + +-dialyzer({[no_return, no_match], [g/0, h/0]}). + +

For help on the warning options, use dialyzer -Whelp. The + options are also enumerated, see function + gui/1 below (WarnOpts).

+ -

- The -dialyzer() attribute is not checked by the Erlang - Compiler, but by the Dialyzer itself. -

+

Attribute -dialyzer() is not checked by the Erlang + compiler, but by Dialyzer itself.

+ -

- The warning option -Wrace_conditions has no effect when - set in source files. -

+

Warning option -Wrace_conditions has no effect when + set in source files.

-

- The -dialyzer() attribute can also be used for turning on - warnings. For instance, if a module has been fixed regarding - unmatched returns, adding the line -

- --dialyzer(unmatched_returns). - -

- can help in assuring that no new unmatched return warnings are - introduced. -

+ +

Attribute -dialyzer() can also be used for turning on + warnings. For example, if a module has been fixed regarding + unmatched returns, adding the following line can help in assuring + that no new unmatched return warnings are introduced:

+ + +-dialyzer(unmatched_returns).
+ + format_warning(Msg) -> string() + Get the string version of a warning message. + + Msg = {Tag, Id, msg()} + See run/1. + + +

Get a string from warnings as returned by + run/1.

+
+
+ gui() -> ok | {error, Msg} gui(OptList) -> ok | {error, Msg} - Dialyzer GUI version + Dialyzer GUI version. - OptList -- see below + OptList + See below.

Dialyzer GUI version.

@@ -368,9 +504,12 @@ OptList :: [Option] Option :: {files, [Filename :: string()]} | {files_rec, [DirName :: string()]} | {defines, [{Macro :: atom(), Value :: term()}]} - | {from, src_code | byte_code} %% Defaults to byte_code - | {init_plt, FileName :: string()} %% If changed from default - | {plts, [FileName :: string()]} %% If changed from default + | {from, src_code | byte_code} + %% Defaults to byte_code + | {init_plt, FileName :: string()} + %% If changed from default + | {plts, [FileName :: string()]} + %% If changed from default | {include_dirs, [DirName :: string()]} | {output_file, FileName :: string()} | {output_plt, FileName :: string()} @@ -383,76 +522,71 @@ Option :: {files, [Filename :: string()]} | {warnings, [WarnOpts]} | {get_warnings, bool()} -WarnOpts :: no_return - | no_unused - | no_improper_lists +WarnOpts :: error_handling + | no_behaviours + | no_contracts + | no_fail_call | no_fun_app + | no_improper_lists | no_match + | no_missing_calls | no_opaque - | no_fail_call - | no_contracts - | no_behaviours + | no_return | no_undefined_callbacks - | unmatched_returns - | error_handling + | no_unused | race_conditions - | overspecs | underspecs - | specdiffs - | unknown + | unknown + | unmatched_returns + | overspecs + | specdiffs
+ - run(OptList) -> Warnings - Dialyzer command line version - - OptList -- see gui/0,1 - Warnings -- see below - + plt_info(string()) -> {'ok', [{atom(), any()}]} | {'error', atom()} + Return information about the specified PLT. -

Dialyzer command line version.

- -Warnings :: [{Tag, Id, Msg}] -Tag :: 'warn_behaviour' - | 'warn_bin_construction' - | 'warn_callgraph' - | 'warn_contract_not_equal' - | 'warn_contract_range' - | 'warn_contract_subtype' - | 'warn_contract_supertype' - | 'warn_contract_syntax' - | 'warn_contract_types' - | 'warn_failing_call' - | 'warn_fun_app' - | 'warn_matching' - | 'warn_non_proper_list' - | 'warn_not_called' - | 'warn_opaque' - | 'warn_race_condition' - | 'warn_return_no_exit' - | 'warn_return_only_exit' - | 'warn_umatched_return' - | 'warn_undefined_callbacks' - | 'warn_unknown' -Id = {File :: string(), Line :: integer()} -Msg = msg() -- Undefined +

Returns information about the specified PLT.

+ - format_warning(Msg) -> string() - Get the string version of a warning message. + run(OptList) -> Warnings + Dialyzer command-line version. - Msg = {Tag, Id, msg()} -- See run/1 + OptList + See gui/0,1. + Warnings + See below. -

Get a string from warnings as returned by dialyzer:run/1.

-
-
- - plt_info(string()) -> {'ok', [{atom(), any()}]} | {'error', atom()} - Returns information about the specified plt. - -

Returns information about the specified plt.

+

Dialyzer command-line version.

+ +Warnings :: [{Tag, Id, Msg}] +Tag :: 'warn_behaviour' + | 'warn_bin_construction' + | 'warn_callgraph' + | 'warn_contract_not_equal' + | 'warn_contract_range' + | 'warn_contract_subtype' + | 'warn_contract_supertype' + | 'warn_contract_syntax' + | 'warn_contract_types' + | 'warn_failing_call' + | 'warn_fun_app' + | 'warn_matching' + | 'warn_non_proper_list' + | 'warn_not_called' + | 'warn_opaque' + | 'warn_race_condition' + | 'warn_return_no_exit' + | 'warn_return_only_exit' + | 'warn_umatched_return' + | 'warn_undefined_callbacks' + | 'warn_unknown' +Id = {File :: string(), Line :: integer()} +Msg = msg() -- Undefined
-- cgit v1.2.3