why is the error reason in a catch/try truncated?

Joe Armstrong <>
Tue Jan 18 15:52:15 CET 2011


I have a program.

When I run the "uncaught" version it prints a very nice error message like
this:

> compile_file(File, Args, ParseTree).

{"init terminating in
do_boot",{badarg,[{lists,member,[free_index,all_keys]},{ecc_db,add_to_list,2},{ecc_db,store,2},{ecc_pass1,start,2},{ecc_compile,compile_file0,3},{ecc_compile,compile_file,3},{ecc,batch,1},{init,start_it,1}]}}

This tells be exactly were I bombed.

In my "production" version of the code I add wrapper with a catch/try to
trap any unwanted errors.
So I write:

compile_file(File, Args, ParseTree) ->
 case (catch compile_file0(File, Args, ParseTree)) of
    {'EXIT', Why} ->
        io:format("Compile file:~s aborted with:~p ~n",[File, Why]);
    _ ->
        ok
    end

But when i run this

> compile_file(File, Args, ParseTree).
Compile file:first.c aborted with:error badarg

So the Why in the error tuple has lost all the useful information that was
in
the untrapped code.

To find the error I have to comment out the wrapped version and
run the unwrapped version. This is because Why is just the atom
badarg and not the more verbose {badarg, ...}

I find this behavior very unhelpfull - am I the only one?


/Joe


More information about the erlang-questions mailing list