Boost logo

Boost :

From: Hendrik Schober (boost_at_[hidden])
Date: 2002-06-18 10:15:53


<scleary_at_[hidden]> wrote:
> [...]
> I toyed with traceable exceptions back before I decided to go the other way.
> Like you, I was only interested in a stack trace when something goes
> *really* bad -- like my program is about to fatally exit.

  But what is "really" bad when you do event based
  programming? Like, for an example, if printing
  fails fatally, you end up in the message loop
  (where for Windows you _have_ to catch every
  exceptions, since you're not allowed to let any
  exception leak into the OS). So printing failed.
  But should I then terminate the application? Why
  not let the user try to save the document?
  Of course, that might fail, too, since the app
  is probably in a state where nothing works anymore.
  But then, it might succeed.
  (If you're writing applications for dummies (as we
  mostly do), having users that don't save for a
  long time is pretty common.)
  Bottom line: In non-critical, interactive, event-
  driven applications, if one event fails, let the
  users decide whether they want to restart the app
  or go ahead and try another event.

  Once you do that, what's a fatal error?

> But now consider: on the Win32 platform, in the case of an access violation
> (the most common "fatal" programming error), an OS exception (not a C++
> exception) is raised. Traceable exceptions can only trace the stack down to
> the point where the OS exception is translated to a C++ exception, not at
> the actual point of error.

  There's a WinAPI function that you can use to
  install a handler for those events.

> If you're a Borland user, the first catch() for
> a VCL object will make this translation; if you don't use the VCL, this
> translation is never made. I'm not sure how MSVC handles this.

  See www.HSchober.de/code/SEHTest.cpp.

> Also, I did not want stack tracing added to other "non-fatal" exceptions. [...]

  If this performance is really a concern to you (which
  seems odd, since exceptions can have a lot of overhead
  by themselves), then a non-traced exception would be
  the way to go.

> I think the biggest issue, though, is intrusive vs. non-intrusive design.

  I like the previously mentioned idea, that these do not
  exclude each other and can co-exist.

> -Steve

  Schobi


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk