libzypp 17.31.23
zypp::Exception Class Reference

Base class for Exception. More...

#include <base/Exception.h>

Inheritance diagram for zypp::Exception:

Public Types

typedef exception_detail::CodeLocation CodeLocation
 
typedef std::list< std::string > History
 
typedef History::const_iterator HistoryIterator
 
typedef History::size_type HistorySize
 

Public Member Functions

 Exception ()
 Default ctor.
 
 Exception (const std::string &msg_r)
 Ctor taking a message.
 
 Exception (std::string &&msg_r)
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
 
 Exception (const std::string &msg_r, const Exception &history_r)
 Ctor taking a message and an exception to remember as history.
 
 Exception (std::string &&msg_r, const Exception &history_r)
 
 Exception (const std::string &msg_r, Exception &&history_r)
 
 Exception (std::string &&msg_r, Exception &&history_r)
 
virtual ~Exception () throw ()
 Dtor.
 
const CodeLocationwhere () const
 Return CodeLocation.
 
void relocate (const CodeLocation &where_r) const
 Exchange location on rethrow.
 
const std::string & msg () const
 Return the message string provided to the ctor.
 
std::string asString () const
 Error message provided by dumpOn as string.
 
std::string asUserString () const
 Translated error message as string suitable for the user.
 

Friends

std::ostream & operator<< (std::ostream &str, const Exception &obj)
 

Related Functions

(Note that these are not member functions.)

std::ostream & operator<< (std::ostream &str, const Exception &obj)
 Stream output.
 

History list of message strings.

Maintain a simple list of individual error messages, that lead to this Exception.

The Exceptions message itself is not included in the history. The History list stores the most recent message fist.

CodeLocation _where
 
std::string _msg
 
History _history
 
void remember (const Exception &old_r)
 Store an other Exception as history.
 
void remember (Exception &&old_r)
 
void remember (std::exception_ptr old_r)
 
void remember (const std::string &msg_r)
 Remembering a plain string is most probably not wanted - we addHistory.
 
void remember (std::string &&msg_r)
 
void addHistory (const std::string &msg_r)
 Add some message text to the history.
 
void addHistory (std::string &&msg_r)
 
template<class TContainer >
void addToHistory (const TContainer &msgc_r)
 addHistory from string container types (oldest first)
 
template<class TContainer >
void moveToHistory (TContainer &&msgc_r)
 addHistory from string container types (oldest first) moving
 
HistoryIterator historyBegin () const
 Iterator pointing to the most recent message.
 
HistoryIterator historyEnd () const
 Iterator pointing behind the last message.
 
bool historyEmpty () const
 Whether the history list is empty.
 
HistorySize historySize () const
 The size of the history list.
 
std::string historyAsString () const
 The history as string.
 
std::string asUserHistory () const
 A single (multiline) string composed of asUserString and historyAsString.
 
virtual std::ostream & dumpOn (std::ostream &str) const
 Overload this to print a proper error message.
 
static std::string strErrno (int errno_r)
 Make a string from errno_r.
 
static std::string strErrno (int errno_r, const std::string &msg_r)
 Make a string from errno_r and msg_r.
 
static std::string strErrno (int errno_r, std::string &&msg_r)
 
static void log (const Exception &excpt_r, const CodeLocation &where_r, const char *const prefix_r)
 Drop a logline on throw, catch or rethrow.
 
static void log (const char *typename_r, const CodeLocation &where_r, const char *const prefix_r)
 \overrload for not-Exception types thrown via ZYPP_THROW
 
virtual const char * what () const throw ()
 Return message string.
 
std::ostream & dumpError (std::ostream &str) const
 Called by std::ostream & operator<<.
 

Detailed Description

Base class for Exception.

Exception offers to store a message string passed to the ctor. Derived classes may provide additional information. Overload dumpOn to provide a proper error text.

The use of these macros is not mandatory. but ZYPP_THROW and ZYPP_RETHROW will adjust the code location information stored in the Exception. All three macros will drop a line in the logfile.

43 try
44 {
45 try
46 {
47 ZYPP_THROW( Exception("Something bad happened.") );
48 }
49 catch ( Exception & excpt )
50 {
51 ZYPP_RETHROW( excpt );
52 }
53
54 }
55 catch ( Exception & excpt )
56 {
57 ZYPP_CAUGHT( excpt );
58 }
Base class for Exception.
Definition: Exception.h:146
Exception()
Default ctor.
Definition: Exception.cc:45
#define ZYPP_RETHROW(EXCPT)
Drops a logline and rethrows, updating the CodeLocation.
Definition: Exception.h:440
#define ZYPP_CAUGHT(EXCPT)
Drops a logline telling the Exception was caught (in order to handle it).
Definition: Exception.h:436
#define ZYPP_THROW(EXCPT)
Drops a logline and throws the Exception.
Definition: Exception.h:428

The above produces the following log lines:

Main.cc(main):47 THROW: Main.cc(main):47: Something bad happened.
Main.cc(main):51 RETHROW: Main.cc(main):47: Something bad happened.
Main.cc(main):57 CAUGHT: Main.cc(main):51: Something bad happened.

Class Exception now offers a history list of message strings. These messages should describe what lead to the exception.

The Exceptions message itself is NOT included in the history.

Rethrow, remembering an old exception:

try
{
....
}
catch( const Exception & olderr_r )
{
ZYPP_CAUGHT( olderr_r )
HighLevelException newerr( "Something failed." );
newerr.rember( olderr_r );
ZYPP_THROW( newerr );
}

Print an Exception, followed by its history, if available:

Exception error;
ERR << error << endl << error.historyAsString();
std::string historyAsString() const
The history as string.
Definition: Exception.cc:146
#define ERR
Definition: Logger.h:98
Todo:
That's a draft to have a common way of throwing exceptions. Most probably, we'll finally use blocxx exceptions here, but not in the remaining code of zypp. If we can, we should try to wrap the blocxx macros and typedef the classes in here.

Definition at line 145 of file Exception.h.

Member Typedef Documentation

◆ CodeLocation

◆ History

typedef std::list<std::string> zypp::Exception::History

Definition at line 151 of file Exception.h.

◆ HistoryIterator

typedef History::const_iterator zypp::Exception::HistoryIterator

Definition at line 152 of file Exception.h.

◆ HistorySize

typedef History::size_type zypp::Exception::HistorySize

Definition at line 153 of file Exception.h.

Constructor & Destructor Documentation

◆ Exception() [1/7]

zypp::Exception::Exception ( )

Default ctor.

Use ZYPP_THROW macros to throw exceptions.

Definition at line 45 of file Exception.cc.

◆ Exception() [2/7]

zypp::Exception::Exception ( const std::string &  msg_r)

Ctor taking a message.

Use ZYPP_THROW macros to throw exceptions.

Definition at line 48 of file Exception.cc.

◆ Exception() [3/7]

zypp::Exception::Exception ( std::string &&  msg_r)

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Definition at line 52 of file Exception.cc.

◆ Exception() [4/7]

zypp::Exception::Exception ( const std::string &  msg_r,
const Exception history_r 
)

Ctor taking a message and an exception to remember as history.

See also
remember Use ZYPP_THROW macros to throw exceptions.

Definition at line 56 of file Exception.cc.

◆ Exception() [5/7]

zypp::Exception::Exception ( std::string &&  msg_r,
const Exception history_r 
)

Definition at line 60 of file Exception.cc.

◆ Exception() [6/7]

zypp::Exception::Exception ( const std::string &  msg_r,
Exception &&  history_r 
)

Definition at line 64 of file Exception.cc.

◆ Exception() [7/7]

zypp::Exception::Exception ( std::string &&  msg_r,
Exception &&  history_r 
)

Definition at line 68 of file Exception.cc.

◆ ~Exception()

zypp::Exception::~Exception ( )
throw (
)
virtual

Dtor.

Definition at line 72 of file Exception.cc.

Member Function Documentation

◆ where()

const CodeLocation & zypp::Exception::where ( ) const
inline

Return CodeLocation.

Definition at line 183 of file Exception.h.

◆ relocate()

void zypp::Exception::relocate ( const CodeLocation where_r) const
inline

Exchange location on rethrow.

Definition at line 187 of file Exception.h.

◆ msg()

const std::string & zypp::Exception::msg ( ) const
inline

Return the message string provided to the ctor.

Note
This is not necessarily the complete error message. The whole error message is provided by asString or dumpOn.

Definition at line 195 of file Exception.h.

◆ asString()

std::string zypp::Exception::asString ( ) const

Error message provided by dumpOn as string.

Definition at line 75 of file Exception.cc.

◆ asUserString()

std::string zypp::Exception::asUserString ( ) const

Translated error message as string suitable for the user.

See also
asUserStringHistory

Definition at line 82 of file Exception.cc.

◆ remember() [1/5]

void zypp::Exception::remember ( const Exception old_r)

Store an other Exception as history.

Definition at line 105 of file Exception.cc.

◆ remember() [2/5]

void zypp::Exception::remember ( Exception &&  old_r)

Definition at line 115 of file Exception.cc.

◆ remember() [3/5]

void zypp::Exception::remember ( std::exception_ptr  old_r)

Definition at line 125 of file Exception.cc.

◆ remember() [4/5]

void zypp::Exception::remember ( const std::string &  msg_r)
inline

Remembering a plain string is most probably not wanted - we addHistory.

It would discards the old history and replace it with this string. If that's actually your intent, explicitly wrap it into an Exception.

Definition at line 227 of file Exception.h.

◆ remember() [5/5]

void zypp::Exception::remember ( std::string &&  msg_r)
inline

Definition at line 230 of file Exception.h.

◆ addHistory() [1/2]

void zypp::Exception::addHistory ( const std::string &  msg_r)

Add some message text to the history.

Definition at line 140 of file Exception.cc.

◆ addHistory() [2/2]

void zypp::Exception::addHistory ( std::string &&  msg_r)

Definition at line 143 of file Exception.cc.

◆ addToHistory()

template<class TContainer >
void zypp::Exception::addToHistory ( const TContainer &  msgc_r)
inline

addHistory from string container types (oldest first)

Definition at line 240 of file Exception.h.

◆ moveToHistory()

template<class TContainer >
void zypp::Exception::moveToHistory ( TContainer &&  msgc_r)
inline

addHistory from string container types (oldest first) moving

Definition at line 247 of file Exception.h.

◆ historyBegin()

HistoryIterator zypp::Exception::historyBegin ( ) const
inline

Iterator pointing to the most recent message.

Definition at line 254 of file Exception.h.

◆ historyEnd()

HistoryIterator zypp::Exception::historyEnd ( ) const
inline

Iterator pointing behind the last message.

Definition at line 258 of file Exception.h.

◆ historyEmpty()

bool zypp::Exception::historyEmpty ( ) const
inline

Whether the history list is empty.

Definition at line 262 of file Exception.h.

◆ historySize()

HistorySize zypp::Exception::historySize ( ) const
inline

The size of the history list.

Definition at line 266 of file Exception.h.

◆ historyAsString()

std::string zypp::Exception::historyAsString ( ) const

The history as string.

Empty if historyEmpty. Otherwise:

- most recent message
- 2nd message
...
- oldest message
std::list< std::string > History
Definition: Exception.h:151

Definition at line 146 of file Exception.cc.

◆ asUserHistory()

std::string zypp::Exception::asUserHistory ( ) const

A single (multiline) string composed of asUserString and historyAsString.

Definition at line 91 of file Exception.cc.

◆ dumpOn()

std::ostream & zypp::Exception::dumpOn ( std::ostream &  str) const
protectedvirtual

Overload this to print a proper error message.

Reimplemented in zypp::UserRequestException, zypp::parser::ParseException, zypp::media::MediaMountException, zypp::media::MediaUnmountException, zypp::media::MediaBadFilenameException, zypp::media::MediaNotOpenException, zypp::media::MediaFileNotFoundException, zypp::media::MediaWriteException, zypp::media::MediaNotAttachedException, zypp::media::MediaBadAttachPointException, zypp::media::MediaCurlInitException, zypp::media::MediaSystemException, zypp::media::MediaNotAFileException, zypp::media::MediaNotADirException, zypp::media::MediaBadUrlException, zypp::media::MediaBadUrlEmptyHostException, zypp::media::MediaBadUrlEmptyFilesystemException, zypp::media::MediaBadUrlEmptyDestinationException, zypp::media::MediaUnsupportedUrlSchemeException, zypp::media::MediaNotSupportedException, zypp::media::MediaCurlException, zypp::media::MediaCurlSetOptException, zypp::media::MediaNotDesiredException, zypp::media::MediaIsSharedException, zypp::media::MediaNotEjectedException, zypp::media::MediaUnauthorizedException, zypp::media::MediaForbiddenException, zypp::media::MediaTimeoutException, zypp::media::MediaFileSizeExceededException, zypp::media::MediaTemporaryProblemException, zypp::media::MediaBadCAException, zypp::repo::RepoException, zypp::repo::ServiceException, zypp::target::rpm::RpmInvalidRootException, zypp::target::rpm::RpmAccessBlockedException, zypp::target::rpm::RpmSubprocessException, zypp::target::rpm::RpmInitException, zypp::target::rpm::RpmDbOpenException, zypp::target::rpm::RpmDbAlreadyOpenException, zypp::target::rpm::RpmDbNotOpenException, zypp::target::rpm::RpmDbConvertException, zypp::target::rpm::RpmNullDatabaseException, zypp::target::rpm::RpmTransactionFailedException, zypp::target::TargetAbortedException, and zypp::media::MediaJammedException.

Definition at line 161 of file Exception.cc.

◆ strErrno() [1/3]

std::string zypp::Exception::strErrno ( int  errno_r)
static

Make a string from errno_r.

Definition at line 171 of file Exception.cc.

◆ strErrno() [2/3]

std::string zypp::Exception::strErrno ( int  errno_r,
const std::string &  msg_r 
)
static

Make a string from errno_r and msg_r.

Definition at line 174 of file Exception.cc.

◆ strErrno() [3/3]

std::string zypp::Exception::strErrno ( int  errno_r,
std::string &&  msg_r 
)
static

Definition at line 177 of file Exception.cc.

◆ log() [1/2]

void zypp::Exception::log ( const Exception excpt_r,
const CodeLocation where_r,
const char *const  prefix_r 
)
static

Drop a logline on throw, catch or rethrow.

Used by ZYPP_THROW macros macros.

Definition at line 183 of file Exception.cc.

◆ log() [2/2]

void zypp::Exception::log ( const char *  typename_r,
const CodeLocation where_r,
const char *const  prefix_r 
)
static

\overrload for not-Exception types thrown via ZYPP_THROW

Definition at line 189 of file Exception.cc.

◆ what()

virtual const char * zypp::Exception::what ( ) const
throw (
)
inlineprivatevirtual

Return message string.

Definition at line 313 of file Exception.h.

◆ dumpError()

std::ostream & zypp::Exception::dumpError ( std::ostream &  str) const
private

Called by std::ostream & operator<<.

Prints CodeLocation and the error message provided by dumpOn.

Definition at line 164 of file Exception.cc.

Friends And Related Function Documentation

◆ operator<< [1/2]

std::ostream & operator<< ( std::ostream &  str,
const Exception obj 
)
friend

Definition at line 167 of file Exception.cc.

◆ operator<<() [2/2]

std::ostream & operator<< ( std::ostream &  str,
const Exception obj 
)
related

Stream output.

Definition at line 167 of file Exception.cc.

Member Data Documentation

◆ _where

CodeLocation zypp::Exception::_where
mutableprivate

Definition at line 308 of file Exception.h.

◆ _msg

std::string zypp::Exception::_msg
private

Definition at line 309 of file Exception.h.

◆ _history

History zypp::Exception::_history
private

Definition at line 310 of file Exception.h.


The documentation for this class was generated from the following files: