util/Exception: add GetFullMessage(std::exception)
This commit is contained in:
parent
6515b9727d
commit
ba09e22c30
@ -29,6 +29,20 @@
|
||||
|
||||
#include "Exception.hxx"
|
||||
|
||||
std::string
|
||||
GetFullMessage(const std::exception &e,
|
||||
const char *fallback, const char *separator) noexcept
|
||||
{
|
||||
try {
|
||||
std::rethrow_if_nested(e);
|
||||
return e.what();
|
||||
} catch (...) {
|
||||
return std::string(e.what()) + separator +
|
||||
GetFullMessage(std::current_exception(),
|
||||
fallback, separator);
|
||||
}
|
||||
}
|
||||
|
||||
std::string
|
||||
GetFullMessage(std::exception_ptr ep,
|
||||
const char *fallback, const char *separator) noexcept
|
||||
@ -36,14 +50,7 @@ GetFullMessage(std::exception_ptr ep,
|
||||
try {
|
||||
std::rethrow_exception(ep);
|
||||
} catch (const std::exception &e) {
|
||||
try {
|
||||
std::rethrow_if_nested(e);
|
||||
return e.what();
|
||||
} catch (...) {
|
||||
return std::string(e.what()) + separator +
|
||||
GetFullMessage(std::current_exception(),
|
||||
fallback, separator);
|
||||
}
|
||||
return GetFullMessage(e, fallback, separator);
|
||||
} catch (const std::nested_exception &ne) {
|
||||
return GetFullMessage(ne.nested_ptr(), fallback, separator);
|
||||
}
|
||||
|
@ -33,6 +33,15 @@
|
||||
#include <exception>
|
||||
#include <string>
|
||||
|
||||
/**
|
||||
* Obtain the full concatenated message of an exception and its nested
|
||||
* chain.
|
||||
*/
|
||||
std::string
|
||||
GetFullMessage(const std::exception &e,
|
||||
const char *fallback="Unknown exception",
|
||||
const char *separator="; ") noexcept;
|
||||
|
||||
/**
|
||||
* Extract the full message of a C++ exception, considering its nested
|
||||
* exceptions (if any).
|
||||
|
Loading…
Reference in New Issue
Block a user