Teuchos Package Browser (Single Doxygen Collection) Version of the Day
Loading...
Searching...
No Matches
Teuchos_TestForException.cpp
Go to the documentation of this file.
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
44
45#include <iostream>
46
47//
48// ToDo: Make these functions thread-safe!
49//
50
51
52namespace {
53
54
55int throwNumber = 0;
56
57
58bool& loc_enableStackTrace()
59{
60 static bool static_enableStackTrace =
61#ifdef HAVE_TEUCHOS_DEFAULT_STACKTRACE
62 true
63#else
64 false
65#endif
66 ;
67 return static_enableStackTrace;
68}
69
70
71} // namespace
72
73
75{
76 ++throwNumber;
77}
78
79
81{
82 return throwNumber;
83}
84
85
86void Teuchos::TestForException_break( const std::string &errorMsg )
87{
88 size_t break_on_me;
89 break_on_me = errorMsg.length(); // Use errMsg to avoid compiler warning.
90 if (break_on_me) {} // Avoid warning
91 // Above is just some statement for the debugger to break on. Note: now is
92 // a good time to examine the stack trace and look at the error message in
93 // 'errorMsg' to see what happened. In GDB just type 'where' or you can go
94 // up by typing 'up' and moving up in the stack trace to see where you are
95 // and how you got to this point in the code where you are throwing this
96 // exception! Typing in a 'p errorMsg' will show you what the error message
97 // is. Also, you should consider adding a conditional break-point in this
98 // function based on a specific value of 'throwNumber' if the exception you
99 // want to examine is not the first exception thrown.
100}
101
102
104{
105 loc_enableStackTrace() = enableStrackTrace;
106}
107
108
110{
111 return loc_enableStackTrace();
112}
113
114void Teuchos::TestForTermination_terminate(const std::string &msg) {
115 std::ostringstream omsg;
116 if (GlobalMPISession::getNProc() > 1) {
117 omsg << "p="<<GlobalMPISession::getRank()<<": ";
118 }
119 omsg << msg << "\n";
120 std::cerr << omsg.str();
121 std::terminate();
122}
123// NOTE: The above usage of ostringstream is so that the output to std::cerr
124// is done as one string. This should help to avoid jumbled output like is
125// occurring in tests that grep for this output (see #3163).
A MPI utilities class, providing methods for initializing, finalizing, and querying the global MPI se...
Standard test and throw macros.
TEUCHOSCORE_LIB_DLL_EXPORT int TestForException_getThrowNumber()
Increment the throw number.
TEUCHOSCORE_LIB_DLL_EXPORT void TestForException_break(const std::string &msg)
The only purpose for this function is to set a breakpoint.
TEUCHOSCORE_LIB_DLL_EXPORT void TestForException_setEnableStacktrace(bool enableStrackTrace)
Set at runtime if stacktracing functionality is enabled when * exceptions are thrown.
TEUCHOSCORE_LIB_DLL_EXPORT void TestForException_incrThrowNumber()
Increment the throw number.
TEUCHOSCORE_LIB_DLL_EXPORT bool TestForException_getEnableStacktrace()
Get at runtime if stacktracing functionality is enabled when exceptions are thrown.
TEUCHOSCORE_LIB_DLL_EXPORT void TestForTermination_terminate(const std::string &msg)
Prints the message to std::cerr and calls std::terminate.