Provides error handling mechanisms for critical errors in the OPM framework.
More...
#include <exception>
#include <iostream>
#include <stdexcept>
#include <string>
Go to the source code of this file.
|
class | CriticalError |
| A custom exception class that extends std::exception to handle critical errors. More...
|
|
Provides error handling mechanisms for critical errors in the OPM framework.
This file contains the CriticalError exception class and macros for handling critical errors in a consistent way across the OPM codebase.
The key components are:
- CriticalError class: A custom exception for critical errors
- OPM_CATCH_AND_RETHROW_AS_CRITICAL_ERROR macro: Catches and rethrows exceptions
- OPM_TRY_THROW_AS_CRITICAL_ERROR macro: Wraps code execution with error handling
Both macros support an optional hint string that provides additional error context:
try {
riskyOperation();
}
"Operation requires valid config");
#define OPM_CATCH_AND_RETHROW_AS_CRITICAL_ERROR(...)
Ends try-catch block and rethrows any caught exceptions as CriticalError.
Definition CriticalError.hpp:136
#define OPM_TRY_THROW_AS_CRITICAL_ERROR(expr,...)
Tries to execute an expression and rethrows any caught exceptions as CriticalError.
Definition CriticalError.hpp:162
When an error occurs, the macros will:
- Catch the exception
- Create a detailed error message including:
- File and line location
- Original error message
- Optional hint string if provided
- Wrap in a CriticalError while preserving the original exception
The hint string is especially useful for providing:
- Troubleshooting guidance
- Required preconditions
- Suggested fixes
- Context about the operation
◆ OPM_CATCH_AND_RETHROW_AS_CRITICAL_ERROR
#define OPM_CATCH_AND_RETHROW_AS_CRITICAL_ERROR |
( |
|
... | ) |
|
Value: catch (const ::Opm::CriticalError&) \
{ \
throw; \
} \
catch (const std::exception& exp) \
{ \
const auto messageForCriticalError = std::string("Error rethrown as CriticalError at [") + __FILE__ + ":" \
+ std::to_string(__LINE__) + "].\nOriginal error: " + exp.what() \
+ ::Opm::detail::makeCriticalErrorMessageErrorHint(__VA_ARGS__); \
throw ::Opm::CriticalError(messageForCriticalError, std::current_exception()); \
} \
catch (...) \
{ \
const auto messageForCriticalError = std::string("Error rethrown as CriticalError at [") + __FILE__ + ":" \
+ std::to_string(__LINE__) + "]. Unknown original error." \
+ ::Opm::detail::makeCriticalErrorMessageErrorHint(__VA_ARGS__); \
throw ::Opm::CriticalError(messageForCriticalError, std::current_exception()); \
}
Ends try-catch block and rethrows any caught exceptions as CriticalError.
This macro is used to catch exceptions and rethrow them as CriticalError. It also provides a way to add an optional hint string to the error message.
- Parameters
-
... | An optional hint string to provide additional error context. |
◆ OPM_TRY_THROW_AS_CRITICAL_ERROR
#define OPM_TRY_THROW_AS_CRITICAL_ERROR |
( |
|
expr, |
|
|
|
... |
|
) |
| |
Value: try { \
expr; \
} catch (const ::Opm::CriticalError&) { \
throw; \
} catch (const std::exception& exp) { \
const auto messageForCriticalError = std::string("Error rethrown as CriticalError at [") + __FILE__ + ":" \
+ std::to_string(__LINE__) + "].\nOriginal error: " + exp.what() \
+ ::Opm::detail::makeCriticalErrorMessageErrorHint(__VA_ARGS__); \
throw ::Opm::CriticalError(messageForCriticalError, std::current_exception()); \
} catch (...) { \
const auto messageForCriticalError = std::string("Error rethrown as CriticalError at [") + __FILE__ + ":" \
+ std::to_string(__LINE__) + "]. Unknown original error." \
+ ::Opm::detail::makeCriticalErrorMessageErrorHint(__VA_ARGS__); \
throw ::Opm::CriticalError(messageForCriticalError, std::current_exception()); \
}
Tries to execute an expression and rethrows any caught exceptions as CriticalError.
- Parameters
-
expr | The expression to execute. |
... | An optional hint string to provide additional error context. |