mirror of https://github.com/Icinga/icinga2.git
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:
parent
5cb7c7cc09
commit
15a16b23d9
|
@ -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";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue