Teuchos - Trilinos Tools Package Version of the Day
Loading...
Searching...
No Matches
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"
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
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.
Functions for returning stacktrace info (GCC only initially).