Commit 2954301e authored by Tomek Mrugalski's avatar Tomek Mrugalski 🛰
Browse files

[support8785] Verbose Exception::what() has been implemented.

  This change by itself does nothing, but it allows changing
  e.what() to e.what(true) to get more details about an exception.
  This can be useful for exception debugging.
parent f1982bb4
......@@ -22,18 +22,30 @@ namespace isc {
const char*
Exception::what() const throw() {
return (what(false));
}
const char*
Exception::what(bool verbose) const throw() {
const char* whatstr = "isc::Exception";
// XXX: even though it's very unlikely that c_str() throws an exception,
// XXX: Even though it's very unlikely that c_str() throws an exception,
// it's still not 100% guaranteed. To meet the exception specification
// of this function, we catch any unexpected exception and fall back to
// the pre-defined constant.
try {
whatstr = what_.c_str();
if (verbose) {
static std::stringstream location;
location.str("");
location << what_ << "[" << file_ << ":" << line_ << "]";
whatstr = location.str().c_str();
} else {
whatstr = what_.c_str();
}
} catch (...) {
// no exception handling is necessary. just have to catch exceptions.
}
return (whatstr);
}
......
......@@ -73,6 +73,16 @@ public:
///
/// @return A C-style character string of the exception cause.
virtual const char* what() const throw();
/// \brief Returns a C-style charater string of the cause of exception.
///
/// With verbose set to true, also returns file name and line numbers.
/// Note that we can't simply define a single what() method with parameters,
/// as the compiler would complain that it shadows the base class method.
///
/// \param verbose if set to true, filename and line number will be added.
/// \return A C-style character string of the exception cause.
virtual const char* what(bool verbose) const throw();
//@}
///
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment