Pass fallback stacktrace to DiagnosticInformation in terminate handler

By default, DiagnosticInformation uses the stack trace saved when the
exception was thrown, but this mechanism is not in use on Windows.
Gathering a stacktrace in the terminate handler serves as a fallback.
This commit is contained in:
Julian Brost 2020-10-20 11:18:34 +02:00
parent 5cb7c7cc09
commit 15a16b23d9
1 changed files with 12 additions and 1 deletions

View File

@ -877,8 +877,19 @@ void Application::ExceptionHandler()
<< "\n" << "\n"
<< "Additional information is available in '" << fname << "'" << "\n"; << "Additional information is available in '" << fname << "'" << "\n";
/* On platforms where HAVE_CXXABI_H is defined, we prefer to print the stack trace that was saved
* when the last exception was thrown. Everywhere else, we do not have this information so we
* collect a stack trace here, which might lack some information, for example when an exception
* is rethrown, but this is still better than nothing.
*/
boost::stacktrace::stacktrace *stack = nullptr;
#ifndef HAVE_CXXABI_H
boost::stacktrace::stacktrace local_stack;
stack = &local_stack;
#endif /* HAVE_CXXABI_H */
ofs << "\n" ofs << "\n"
<< DiagnosticInformation(ex) << DiagnosticInformation(ex, true, stack)
<< "\n"; << "\n";
} }