Newbie compilation question

Ulf Wiger <>
Tue Dec 22 14:49:24 CET 1998


One way to spawn processes that will actually give more info is

proc_lib:spawn(Mod, Function, Args).

I was going to run it myself to show how well it works, but first i had to
download OS Erlang to my home PC. Unfortunately, it's not a complete
installation - among other things it lacks the SASL application, which I
think is the one that displays pretty error messages.

Not to be easily deterred, I downloaded the tar file with all the libraries
and unpacked it, only to find that the libraries were not compiled! No big
deal on a unix box, but I feel a bit crippled on this #¤%# windoze piece of
crap.

I gave it a try, only to receive an error message from erlc that it didn't
recognize the macro '-vsn'... !?!??

Am I the only one wanting a full Erlang installation for Windows? Or am I
just the only one who's too stupid to figure it out? Why aren't all
libraries included from the start?

/Uffe

-----Original Message-----
From: Claes Wikstrom <>
To: Mark NG <>
Cc:  <>
Date: den 18 december 1998 11:00
Subject: Newbie compilation question


>
>Mark NG writes:
> >
> >
> > Hallo !
> >
> >
> > When I was writing a program I wrote "list:append/2" in my code instead
of
> > the correct one - "lists:append/2".  The compiler fail to notify me of
that
> > and when I ran it by spawning a process  it just dies out quitely...
> >
> > I had to use the Process Manager's tracing facility to find out that it
> > is due to a missing 's' in the function call !
> >
> > So, my questions is
> > 1) How can I make the compiler (I am using c:c/1) notify me of undefined
> >    symbols ?
>
>This we simply cannot do. All references to modules and functions are
>resolved at runtime. There is no link phase at all !!!
>This is so since we want to be able to load code in the running system
>in a flexible way.
>
> >
> > 2) How can I get the error messages of a spawn proces to appear on the
shell ?
> >
>
>This can be done, but it's not easy. This is what happens:
>
>1. The runtime system creates an new process.
>2. The process start to execute.
>3. The runtime system sees a call to list:append/2 (miss spelled)
>4. The runtime system realizes that no module named 'list' is loaded
>   so insted it invokes nother module called the error_handler
>
>   Thus the call to list:append(X,Y) is transformd into a call
>   error_handler:undefined_function(list, append, [X, Y])
>
>   This error_handler module resides in kernel/src/error_handler.erl
>
>   The error_handler (in kernel/src) will ask the code server to
>   search the load_path and try to load a module called list.jam
>
>   If this failes, the error_hanler simply does a call to
>   exit({undef,{Module,Func,Args}})
>
>   Which will silently exit te process.
>
>However in an environment where we sit and develop we could
>sometimes want to have a different behaviour there, for example
>print a little friendly something on stdout saying that we can't find
>the module list.erl
>This is bad default behaviour though.
>
>As an exercise you could try to modify the error_handler to do
>just that and then (maybe in your ~/.erlang) load your own
>error_handler instead of the systems.
>
>I know that Arndt Jonason has done just that, he is running
>some weird error_handler that tries to correct misspelleded
>modules at runtime !!
>
>You can also give the -pa Dir flag to 'erl' and point it
>to a directory where a different error_handler resides.
>
>Cheers
>
>/klacke
>
>




More information about the erlang-questions mailing list