This library uses
std::nested_exception
and
std::throw_with_nested
and can be applied in order to not lose information while propagating an original
std::exception
upwards through a chain of function calls and create a backtrace without any
overhead (compare e.g. logging of debug messages). This avoids much of the need for any
debugging and provides a way of ensuring that a library does not crash ungracefully.
#include <trace/trace.hpp>The library revolves around three macros
trace::initiate: can be placed anywhere. Takes astd::string messageand initiates a trace with information about the corresponding function and source file. This is done by throwing an exception.trace::propagate: should be placed in a catch-block. Takes astd::string message, attaches it to the trace and propagates the trace up the function call stack by rethrowing a nested exceptiontrace::handle: should be placed in a catch-block. Takes astd::exception &and unwraps it to creates a backtrace
and the function trace::latest(), which returns the most recent backtrace, created by
the call to handle.