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 message
and 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
.