Teuchos - Trilinos Tools Package  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Teuchos_StandardCatchMacros.hpp
1 // @HEADER
2 // ***********************************************************************
3 //
4 // Teuchos: Common Tools Package
5 // Copyright (2004) Sandia Corporation
6 //
7 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
8 // license for use of this work by or on behalf of the U.S. Government.
9 //
10 // Redistribution and use in source and binary forms, with or without
11 // modification, are permitted provided that the following conditions are
12 // met:
13 //
14 // 1. Redistributions of source code must retain the above copyright
15 // notice, this list of conditions and the following disclaimer.
16 //
17 // 2. Redistributions in binary form must reproduce the above copyright
18 // notice, this list of conditions and the following disclaimer in the
19 // documentation and/or other materials provided with the distribution.
20 //
21 // 3. Neither the name of the Corporation nor the names of the
22 // contributors may be used to endorse or promote products derived from
23 // this software without specific prior written permission.
24 //
25 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
26 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
29 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 //
37 // Questions? Contact Michael A. Heroux (maherou@sandia.gov)
38 //
39 // ***********************************************************************
40 // @HEADER
41 
42 #ifndef TEUCHOS_STANDARD_CATCH_MACROS_HPP
43 #define TEUCHOS_STANDARD_CATCH_MACROS_HPP
44 
46 #include "Teuchos_FancyOStream.hpp"
48 #include "Teuchos_stacktrace.hpp"
49 #include "Teuchos_Assert.hpp"
50 
51 
52 #ifdef HAVE_TEUCHOS_STACKTRACE
53 # define TEUCHOS_GET_STORED_STACKTRACE() \
54  (Teuchos::TestForException_getEnableStacktrace() \
55  ? Teuchos::get_stored_stacktrace() + "\n" \
56  : std::string() )
57 #else
58 # define TEUCHOS_GET_STORED_STACKTRACE() ""
59 #endif
60 
61 
65 #define TEUCHOS_STANDARD_CATCH_STATEMENTS_IMPL(VERBOSE, ERR_STREAM, \
66  SHOW_STACK_TRACE, SUCCESS_FLAG \
67  ) \
68  catch (const std::exception &excpt) { \
69  if((VERBOSE)) { \
70  std::ostringstream oss; \
71  oss \
72  << "\np="<<::Teuchos::GlobalMPISession::getRank() \
73  <<": *** Caught standard std::exception of type \'" \
74  <<Teuchos::concreteTypeName(excpt)<<"\' :\n\n"; \
75  Teuchos::OSTab scsi_tab(oss); \
76  if (SHOW_STACK_TRACE) { \
77  scsi_tab.o() << TEUCHOS_GET_STORED_STACKTRACE(); \
78  } \
79  scsi_tab.o() << excpt.what() << std::endl; \
80  (ERR_STREAM) << std::flush; \
81  (ERR_STREAM) << oss.str(); \
82  (SUCCESS_FLAG) = false; \
83  } \
84  } \
85  catch (const int &excpt_code) { \
86  if((VERBOSE)) { \
87  std::ostringstream oss; \
88  oss \
89  << "\np="<<::Teuchos::GlobalMPISession::getRank() \
90  << ": *** Caught an integer exception with value = " \
91  << excpt_code << std::endl; \
92  (ERR_STREAM) << std::flush; \
93  (ERR_STREAM) << oss.str(); \
94  (SUCCESS_FLAG) = false; \
95  } \
96  } \
97  catch ( ... ) { \
98  if ((VERBOSE)) { \
99  std::ostringstream oss; \
100  oss << "\np="<<::Teuchos::GlobalMPISession::getRank() \
101  <<": *** Caught an unknown exception\n"; \
102  (ERR_STREAM) << std::flush; \
103  (ERR_STREAM) << oss.str(); \
104  (SUCCESS_FLAG) = false; \
105  } \
106  }
107 
108 
109 
136 #define TEUCHOS_STANDARD_CATCH_STATEMENTS(VERBOSE, ERR_STREAM, SUCCESS_FLAG) \
137  TEUCHOS_STANDARD_CATCH_STATEMENTS_IMPL(VERBOSE, ERR_STREAM, true, SUCCESS_FLAG)
138 
139 
140 #endif // TEUCHOS_STANDARD_CATCH_MACROS_HPP
Functions for returning stacktrace info (GCC only initially).
A MPI utilities class, providing methods for initializing, finalizing, and querying the global MPI se...
Defines basic traits returning the name of a type in a portable and readable way. ...