X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSalomeApp%2FSalomeApp_ExceptionHandler.cxx;h=4534dcf6bd5da930cbc2b0320635be9d40c7a6b5;hb=75e47574c7b9e08f69d35391de2a126684e275fb;hp=16b5004ce8259e53931d647fa9dec343c6d9bcd0;hpb=101fd10f1e736daa5d7f0f0ee5499b951460832a;p=modules%2Fgui.git diff --git a/src/SalomeApp/SalomeApp_ExceptionHandler.cxx b/src/SalomeApp/SalomeApp_ExceptionHandler.cxx index 16b5004ce..4534dcf6b 100644 --- a/src/SalomeApp/SalomeApp_ExceptionHandler.cxx +++ b/src/SalomeApp/SalomeApp_ExceptionHandler.cxx @@ -1,22 +1,28 @@ -// Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D -// +// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // -// See http://www.salome-platform.org/ +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // + #include "SalomeApp_ExceptionHandler.h" +#include "Utils_CorbaException.hxx" + #include "CASCatch.hxx" #include @@ -24,26 +30,38 @@ #include #include -#include +#include + +#include +#include + /*!Constructor. Initialize by \a floatSignal.*/ SalomeApp_ExceptionHandler::SalomeApp_ExceptionHandler( const bool floatSignal ) : SUIT_ExceptionHandler() { - OSD::SetSignal( floatSignal ); + // JFA 2006-09-28: PAL10867: suppress signal catching, + // if environment variable DISABLE_SIGNALS_CATCHING is set to 1. + // Commonly this is used with "noexcepthandler" option. + char* envNoCatchSignals = getenv("NOT_INTERCEPT_SIGNALS"); + if (!envNoCatchSignals || !atoi(envNoCatchSignals)) + { + OSD::SetSignal( floatSignal ); + } } /*!Try to call SUIT_ExceptionHandler::internalHandle(o, e), catch if failure.*/ bool SalomeApp_ExceptionHandler::handleSignals( QObject* o, QEvent* e ) { - CASCatch_TRY { + try { + OCC_CATCH_SIGNALS; SUIT_ExceptionHandler::internalHandle( o, e ); } - CASCatch_CATCH(Standard_Failure) { - Handle(Standard_Failure) aFail = Standard_Failure::Caught(); + catch(Standard_Failure) { + Handle(Standard_Failure) aFail = Standard_Failure::Caught(); throw Standard_Failure( aFail->GetMessageString() ); } - + return true; } @@ -64,7 +82,11 @@ bool SalomeApp_ExceptionHandler::handle( QObject* o, QEvent* e ) { showMessage( title, QString( e.GetMessageString() ) ); } -#ifndef WNT + catch( SALOME::SALOME_Exception& ex) + { + showMessage( title, QString( ex.details.text)); + } +#ifndef WIN32 catch(...) { showMessage( title, "Unknown Exception" ); @@ -77,5 +99,17 @@ bool SalomeApp_ExceptionHandler::handle( QObject* o, QEvent* e ) /*!Create new SUIT_ExceptionHandler*/ extern "C" SALOMEAPP_EXPORT SUIT_ExceptionHandler* getExceptionHandler() { - return new SalomeApp_ExceptionHandler( true ); + // MSV 2006-04-26: work around PAL12004 "VTK window => SIGFPE Arithmetic Exception Detected" + // We disable FPE signal as it was in earlier versions of SALOME. It is enabled + // only in debug mode if the environment variable DISABLE_FPE is not set to 1. + bool raiseFPE; + raiseFPE = false; + +#if defined(_DEBUG_) | defined(_DEBUG) //the Last for WIN32 default settings + char* envEnableFPE = getenv("ENABLE_FPE"); + if (envEnableFPE && atoi(envEnableFPE)) + raiseFPE = true; +#endif + + return new SalomeApp_ExceptionHandler( raiseFPE ); }