[phobos] Calling abort() on unhandled exception

Steve Schveighoffer schveiguy at yahoo.com
Fri Jul 30 03:55:19 PDT 2010





----- Original Message ----
> From: Andrei Alexandrescu <andrei at erdani.com>
> To: Discuss the phobos library for D <phobos at puremagic.com>
> Sent: Fri, July 30, 2010 1:01:57 AM
> Subject: Re: [phobos] Calling abort() on unhandled exception
> 
> Sean Kelly wrote:
> > On Jul 29, 2010, at 9:37 PM, Andrei Alexandrescu  wrote:
> > 
> >> Sean Kelly wrote:
> >>> On Jul 29, 2010,  at 8:21 PM, Walter Bright wrote:
> >>>> Andrei Alexandrescu  wrote:
> >>>>> Walter Bright wrote:
> >>>>>>  I think we misunderstand each other. A file copy program that fails due 
>to, say,  the disk being full, should not produce a core dump. It should produce 
>an error  message like:
> >>>>>> 
> >>>>>> error:  disk full
> >>>>>> 
> >>>>>> An uncaught  exception is NOT an invalid or crashed program
> >>>>>>   in D.
> >>>>> I think Sean talks about Throwable objects that  are not Exception 
>objects.
> >>>>> 
> >>>> It's  reasonable for seg fault exceptions to produce a core dump. It isn't 
>for  recoverable Exceptions, or for non-recoverable ones like out of  memory.
> >>> At the moment, we don't differentiate between seg faults  and 
>non-recoverable errors.  Though seg faults are only thrown as  exceptions on 
>Windows which doesn't have core dumps anyway, as far as I know.  For what it's 
>worth, I was investigating this bug:
> >>>   http://d.puremagic.com/issues/show_bug.cgi?id=4385
> >> I see. Overall,  my opinion is that regular exceptions that escape main(0 
>should simply print  their error message to stderr and exit(1). There should be 
>no stack trace,  abort(), core dump, or anything worse than that. Print the 
>string and exit(1).  Anything more will force most people to actually insert a 
>try/catch in  main
> >>  to do the simple thing.
> > 
> > I think the  stack trace at least should remain. People have been begging for 
>that for years,  and I do think it's pretty useful. Simply
> > printing an error message says  nothing about the context, and it's
> > context that gives error messages  meaning.
> 
> I for one really enjoy stuff like:
> 
> void main(string[]  args)
> {
>     enforce(args.length > 1, "Usage: prog  arg");
>     ...
> }

void usageEnforce(bool condition)
{
  if(!condition)
  {
     writeln("Usage: prog arg");
     exit(1);
  }
}

Please, let's leave stack traces for exceptions that escape main.  It's not a 
condition that most developers plan on happening.  When the unexpected exception 
happens, you can be lost without a stack trace.  All you get is something like 
this:

Uncaught exception in someModuleYouDidntWrite(123): parameter should be > 0

I do hope to see better stack traces than what we currently get though...

-Steve



      


More information about the phobos mailing list