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

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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.