Dialyzer returns warnings connected with dependencies

I’ve updated a version of Elixir in a project with multiple applications under umbrella project.

Elixir is updated from: 1.6.4 to 1.7.3
Erlang is updated from: 20.2 to 21.0.8 (tried also on 21.0.2)

After running mix dialyzer, There are pretty a lot of errors, we didn’t have earlier. As an example, I get following warnings, each duplicated few times:

Callback info about the Supervisor behaviour is not available.

Callback info about the Plug behaviour is not available.

Callback info about the GenServer behaviour is not available.

Our current setup of dialyzer is following:

  dialyzer: [
    plt_add_deps: :transitive,
    plt_add_apps: [:mix],
    remove_defaults: [:unknown],
    ignore_warnings: ".dialyzer/ignore-warnings",
    excluded_paths: [
      build_path() <> "/dev/lib/project_under_umbrella_1/ebin",
      build_path() <> "/dev/lib/project_under_umbrella_2/ebin"

We have only dialyzer setup in the root of the project. Such a setup is not defined under each of umbrella projects.

  • I’ve tried to change, also: plt_add_deps: true - list of warnings didn’t shorten.

Do you have any other idea, I can try to remove warnings generated by libraries, we use? I would like to prevent adding such warnings to ignore_warnings file.

I had a bunch of errors with dialyzer when using elixir 1.7.2 & erlang 21, and had to use elixir 1.7.2 BUT compiled with erlang > 21 (with asdf, version -> 1.7.2-otp-21)

1 Like

As @amnu3387 suggests, this may be because of some changes with debug-symbols in the BEAM.

If your elixir version is compiled with an erlang/OTP version prior to 20, then your elixir version (and your deps) do only contain old style debug info.

Therefore please check your elixir version with elixir --version, also please make sure you have fully recompiled all of your dependencies in your project, by recursively deleting all _build and deps folders in the umbrella and then mix do deps.get, deps.build.


Thank you for giving a direction @amnu3387 @NobbZ how to resolve it.

I wasn’t aware of that during installation Elixir, it is possible to provide OTP version. I had an Elixir compiled with earlier OTP. After changing to OTP 21, I didn’t get errors coming from Elixir or libraries.

If any of you will have a similar problem and you use asdf (version manager), then remember about adding an OTP version used in compilation:

asdf install elixir 1.7.3-otp-21