[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