Skip to content

An exception backtracing library

License

Notifications You must be signed in to change notification settings

GPMueller/trace

Folders and files

NameName
Last commit message
Last commit date
Apr 4, 2022
Mar 19, 2022
Feb 8, 2021
Feb 8, 2021
Feb 8, 2021
Dec 15, 2019
Apr 4, 2022
Dec 15, 2019
Feb 8, 2021

Repository files navigation

trace - portable exception backtracing in C++17

CI Coverage

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.

Usage

#include <trace/trace.hpp>

The library revolves around three macros

  • trace::initiate: can be placed anywhere. Takes a std::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 a std::string message, attaches it to the trace and propagates the trace up the function call stack by rethrowing a nested exception
  • trace::handle: should be placed in a catch-block. Takes a std::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.