Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

GPMueller/mwe-cpp-exception

Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Proper, portable exception handling with backtracing in C++11

Build Status

See GPMueller/trace for a proper exception backtracing library.

This MWE shows how std::nested_exception and std::throw_with_nested 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. Output should look something like this:

Library API: Exception caught in function 'api_function'
Backtrace:
~/Git/mwe-cpp-exception/src/detail/Library.cpp:17 : library_function failed
~/Git/mwe-cpp-exception/src/detail/Library.cpp:13 : could not open file "nonexistent.txt"

The example may seem a bit overkill, displaying a library with an API layer, but it shows a thorough way of dealing cleanly with exceptions. main calls an API function, which in turn calls a library function which deliberately throws. The API function catches the exception and calls a handler function.

Inspiration for this MWE was taken from https://stackoverflow.com/a/37227893/4069571 and https://stackoverflow.com/a/348862/4069571

Build

CMake is used to configure the build. To build the executable:

mkdir -p build
cd build
cmake ..
cmake --build .

TODO

  • Extend this MWE with example exceptions which do not require the code to terminate.
  • Create unit tests with catch, using e.g. REQUIRE_THROWS

About

Minimum working example of proper C++11 exception handling

Topics

Resources

License

Stars

Watchers

Forks

Morty Proxy This is a proxified and sanitized view of the page, visit original site.