Boost logo

Boost :

From: Carl Daniel (cpdaniel_at_[hidden])
Date: 2003-09-20 23:52:04


carlos pizano wrote:
> Hello Boosters. I am looking into the boost.test library for insights.
> In particular I like the boost::execution_monitor idea. However, I
> found
> that on Windows + VC execution_monitor implementation uses
> _set_se_translator() to translate native exceptions (SEHs) into C++
> exceptions, and I was fine with that for a while until I stumbled unto
> John Robbins book : "Debugging applications for Microsoft .NET and for
> Microsoft Windows" (Microsoft Press, 2003) chapter 13 specifically in
> pg. 524 he has section named "Don't Use _set_se_translator" where he
> goes to say that _set_se_translator:
>
> 1- Is not global, works only on a per thread basis

Naturally. Since DLLs frequently create internal worker threads, a global
SE translator function would be very inappropriate.

> 2- Does not work in release builds (!!)

_set_se_translator works just fine in release builds.

> 3- Forces your code to use asynchronous exception handling (/EHa),
> which reduces performance and maybe increases code bloat.

This is true. If, that is, you're relying on proper C++ unwinding semantics
when an SEH is raised. With /EHs, _set_se_translator will still be called,
but some C++ objects may not have destructors called, and the exception may
not be caught in the nearest enclosing scope. This isn't a problem with
_set_se_tranlator, per se, but due to the fact that the c++ compiler may
optimize-out exception handling frames where it can show that no exception
can occur under the synchronous model.

-cd


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