Cantera  3.1.0
Loading...
Searching...
No Matches
ctexceptions.cpp
Go to the documentation of this file.
1//! @file ctexceptions.cpp
2
3// This file is part of Cantera. See License.txt in the top-level directory or
4// at https://cantera.org/license.txt for license and copyright information.
5
7#include "application.h"
9
10#define BOOST_STACKTRACE_GNU_SOURCE_NOT_REQUIRED
11#include <boost/stacktrace.hpp>
12
13#include <sstream>
14
15namespace Cantera
16{
17
19
20CanteraError::CanteraError(const string& procedure) :
21 procedure_(procedure)
22{
23 if (traceDepth_) {
24 auto trace = boost::stacktrace::stacktrace(0, traceDepth_);
25 traceback_ = boost::stacktrace::to_string(trace);
26 }
27}
28
29const char* CanteraError::what() const throw()
30{
31 try {
32 formattedMessage_ = "\n" + string(79, '*') + "\n";
34 if (procedure_.size()) {
35 formattedMessage_ += " thrown by " + procedure_;
36 }
37 formattedMessage_ += ":\n" + getMessage();
38 if (formattedMessage_.compare(formattedMessage_.size()-1, 1, "\n")) {
39 formattedMessage_.append("\n");
40 }
41 if (traceDepth_) {
42 formattedMessage_ += string(79, '-') + "\n" + traceback_;
43 }
44 formattedMessage_ += string(79, '*') + "\n";
45
46 } catch (...) {
47 // Something went terribly wrong and we couldn't even format the message.
48 }
49 return formattedMessage_.c_str();
50}
51
53{
54 return msg_;
55}
56
58{
59 return procedure_;
60}
61
63{
64 traceDepth_ = depth;
65}
66
68{
69 return fmt::format("Array size ({}) too small. Must be at least {}.",
70 sz_, reqd_);
71}
72
74{
75 return fmt::format("IndexError: {}[{}] outside valid range of 0 to {}.",
76 arrayName_, m_, mmax_);
77}
78
79} // namespace Cantera
string getMessage() const override
Method overridden by derived classes to format the error message.
const char * what() const override
Get a description of the error.
string traceback_
Stack trace to location where exception was thrown.
virtual string getMessage() const
Method overridden by derived classes to format the error message.
string formattedMessage_
Formatted message returned by what()
static int traceDepth_
Number of stack frames to show. 0 to disable.
string procedure_
The name of the procedure where the exception occurred.
CanteraError()
Protected default constructor discourages throwing errors containing no information.
string msg_
Message associated with the exception.
static void setStackTraceDepth(int depth)
Set the number of stack frames to include when a CanteraError is displayed.
virtual string getMethod() const
Get the name of the method that threw the exception.
virtual string getClass() const
Method overridden by derived classes to indicate their type.
string getMessage() const override
Method overridden by derived classes to format the error message.
Definitions for the classes that are thrown when Cantera experiences an error condition (also contain...
This file contains definitions for utility functions and text for modules, inputfiles and logging,...
Namespace for the Cantera kernel.
Definition AnyMap.cpp:595