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);
}
///
/// @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();
//@}
///