| #ifndef THIRD_PARTY_GBMCWEB_INCLUDE_EXCEPTION_STACK_TRACER_HPP_ |
| #define THIRD_PARTY_GBMCWEB_INCLUDE_EXCEPTION_STACK_TRACER_HPP_ |
| |
| // Installs a std::terminate handler that prints the ORIGINAL throw-site stack |
| // of the uncaught exception, recorded at throw time by a __cxa_throw |
| // interposer (folly exception_tracer mechanism). Exceptions captured into a |
| // std::exception_ptr and rethrown later (asio scheduler |
| // rethrow_pending_exception, sdbusplus do_unpack posted rethrow) otherwise |
| // terminate with a stack that only shows the rethrow site. |
| // |
| // The terminate path never allocates, takes no locks, and guards against |
| // re-entry; see src/exception_stack_tracer.cpp for the full constraints. |
| // |
| // The interposer is active as soon as its TU is linked in; this call installs |
| // the terminate handler and snapshots the module table used to symbolize |
| // frames. Call it first thing in run() so nothing on the crash path |
| // allocates, dlopens, or takes the loader lock. |
| // |
| // With enable == false (--exception_stack_tracer=false kill switch), |
| // recording becomes a no-op and the default terminate handler is kept. |
| void installExceptionStackTracer(bool enable = true); |
| |
| #endif // THIRD_PARTY_GBMCWEB_INCLUDE_EXCEPTION_STACK_TRACER_HPP_ |