[Insight-developers] Floating Point Exception Handling in ITK -- your feedback needed.
Bill Lorensen
bill.lorensen at gmail.com
Wed Jul 14 20:09:57 EDT 2010
Please fix the compile errors associated with your checkin.
On Wed, Jul 14, 2010 at 11:06 AM, kent williams
<norman-k-williams at uiowa.edu> wrote:
> I have an itk::FloatingPointExceptions class now that on OS X and Linux that
> turns on numerical exceptions. It's simple enough on the outside, and not
> that complicated on the inside; but before I check it in I wanted to make
> sure that it passed stylistic muster with you lot.
>
> If you enable numerical exceptions with this class, the default behavior is
> to call abort(). This is consistent (I think) with the Borland 6 behavior.
>
> The SetExceptionAction method allows you to specify whether to call exit or
> abort when an exception is thrown. This is only part of the class for the
> benefit of CTest: You can have tests in CMake that pass only when the test
> returns non-zero (i.e. fails), but if a test program aborts, that counts as
> a test failure even if you set the property WILL_FAIL to TRUE for that test.
>
> This class, in a default Insight build, does nothing. You have to set
> ITK_USE_FLOATINGPOINTEXCEPTIONS to ON when you configure a build to turn on
> floating point exceptions. If this CMAKE variable is turned off, there's no
> change at all to the ITK library's current behavior.
>
> The itkFloatingPointExceptions.cxx contains specific code for OS X Intel
> (tested), OS X PPC (not tested), Linux (tested), and Windows (not tested or
> fully implemented).
>
> The Windows code does turn on exceptions, but doesn't have a SIGFPE handler
> to exit or abort on exceptions. I don't know if there's a special way to
> set this up on Windows, and don't have a Windows machine set up to build and
> test that. I assume that implementing this on Windows would be
> straightforward, modulo Microsoft's usual obtuseness.
>
> The FloatingPointExceptions is a singleton -- its only members are static,
> and it can't be instantiated.
>
>
> /** \class itkFloatingPointExceptions
> * Allows floating point exceptions to be caught during program execution.
> */
> class ITK_EXPORT FloatingPointExceptions
> {
> public:
> /** defines what should happen when exceptions occur */
> typedef enum { ABORT, EXIT } ExceptionAction;
> /** Enable floating point exceptions */
> static void Enable();
>
>
> /** Disable floating point exceptions. */
> static void Disable();
> /** Control whether exit(255) or abort() is called on an exception */
> static void SetExceptionAction(ExceptionAction a);
> /** Access current ExceptionAction */
> static ExceptionAction GetExceptionAction();
> private:
> FloatingPointExceptions(); // Not implemented.
> FloatingPointExceptions(const FloatingPointExceptions&); // Not
> // implemented.
> void operator=(const FloatingPointExceptions&); // Not implemented.
> /** static member that controls what happens during an exception */
> static ExceptionAction m_ExceptionAction;
> };
>
>
> _______________________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Kitware offers ITK Training Courses, for more information visit:
> http://kitware.com/products/protraining.html
>
> Please keep messages on-topic and check the ITK FAQ at:
> http://www.itk.org/Wiki/ITK_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://www.itk.org/mailman/listinfo/insight-developers
>
More information about the Insight-developers
mailing list