/** @file $Id$ $Date$ $Author$ @copy © Marc Wäckerlin @license LGPL, see file COPYING $Log$ Revision 1.4 2004/10/13 10:41:28 marc no newline at the end of stack trace Revision 1.3 2004/08/28 16:21:25 marc mrw-c++-0.92 (mrw) - new file: version.cpp - new file header for all sources - work around warning in mrw::auto - possibility to compile without log4cxx - work around bugs in demangle.h and libiberty.h - corrections in documentation - added simple tracing mechanism - more warnings - small corrections in Auto<>::Free and a new test for it - possibility to compile without stack trace */ #include #include #include #include namespace mrw { /** @addtogroup StackTrace */ //@{ /** @defgroup AutoTrace Automated Unexpected Handler with Stack Trace @brief Don't care about the unexpected handler, let the library do all the repetitive work for you. For all your programs it is recommended to implement an identical unexpected handler, that rethrows, catches the @c mrw::exception, @c std::exception and all unknown exceptions, traces them and finally quits with a throw of a @c atd::bad_exception. The only thing that may be different from project to project is, how tracing is done. The MRW C++ Class Library provides you with additional libraries you can link to. By linking to the library, you get an unexpected handler for free: You don't need to add a single line of code, just link to one more library! The libraries differ in how tracing is done. The Implementation is done with a static instance of a class that sets the unexpected handler in the constructor. @section trcstderr Trace using std::cerr If you link to the library @c libmrwexcstderr using a linker option such as: @c -lmrwexcstderr, then an unexpected handler is registered, that traces to the standard error stream @c std::cerr. You don't need to change a single line in your code! */ //@{ /** @brief unexpected handler, that traces to @c std::cerr The unexpected handler is installed automatically when you link to @c -lmrwexcstderr. The implementation of this unexpected handler is as follows: @code void unexpected_stderr() { std::cerr<<"UNEXPECTED EXCEPTION: ----------------------------"<