Don't create formatters on the fly in print_terminate_trace()

This commit is contained in:
Jeremy Rifkin 2025-02-18 20:15:12 -06:00
parent b0d12daf22
commit 832c3014b0
No known key found for this signature in database
GPG Key ID: 19AA8270105E8EB4

View File

@ -27,11 +27,17 @@ namespace cpptrace {
extern const int stdout_fileno = detail::fileno(stdout);
extern const int stderr_fileno = detail::fileno(stderr);
namespace detail {
const formatter& get_terminate_formatter() {
static formatter the_formatter = formatter{}
.header("Stack trace to reach terminate handler (most recent call first):");
return the_formatter;
}
}
CPPTRACE_FORCE_NO_INLINE void print_terminate_trace() {
try { // try/catch can never be hit but it's needed to prevent TCO
formatter{}
.header("Stack trace to reach terminate handler (most recent call first):")
.print(std::cerr, generate_trace(1));
detail::get_terminate_formatter().print(std::cerr, generate_trace(1));
} catch(...) {
if(!detail::should_absorb_trace_exceptions()) {
throw;