erlangdialyzer

Why does dialyzer fail on nocatch?


I ran Dialyzer and got the following error:

Checking whether the PLT /tmp/.BRANCH.service.deps.plt is up-to-date...
{"init terminating in do_boot",
 {{case_clause,
      {{nocatch,
           {dialyzer_error,
               [78,111,116,32,97,32,114,101,103,117,108,97,114,32,102,105,108,
                101,58,32,
                "/usr/lib/erlang/lib/compiler-6.0.3/ebin/beam_a.beam",10]}},
       [{dialyzer_plt,compute_md5_from_file,1,
            [{file,"dialyzer_plt.erl"},{line,543}]},
        {dialyzer_plt,compute_new_md5_1,3,
            [{file,"dialyzer_plt.erl"},{line,509}]},
        {dialyzer_plt,check_plt1,3,[{file,"dialyzer_plt.erl"},{line,485}]},
        {dialyzer_plt,'-subproc/1-fun-0-',1,
            [{file,"dialyzer_plt.erl"},{line,603}]}]}},
  [{dialyzer_cl,check_plt,3,[{file,"dialyzer_cl.erl"},{line,249}]},
   {dialyzer_cl,plt_common,3,[{file,"dialyzer_cl.erl"},{line,182}]},
   {dialyzer,'-cl_check_init/1-fun-0-',1,[{file,"dialyzer.erl"},{line,94}]},
   {dialyzer,doit,1,[{file,"dialyzer.erl"},{line,236}]},
   {dialyzer,plain_cl,0,[{file,"dialyzer.erl"},{line,75}]},
   {init,start_em,1,[]},
   {init,do_boot,3,[]}]}}

What went wrong and how do I fix it? What do the list of integers mean?


Solution

  • The print-out inside the dialyzer_error tuple is an iolist. We can pretty print it using the Erlang shell (started with erl):

    1> [78,111,116,32,97,32,114,101,103,117,108,97,114,32,102,105,108,101,58,32].
    "Not a regular file: "
    2>
    

    You realize it is complaining about bytecode (.beam) from a previous compiler version than the current one I am running. I removed them, and then it ran.