Можно ли как-нибудь получить .what()
необработанного исключения C ++, в то же время установив фильтр необработанного исключения windows?
Чтобы продемонстрировать следующую программу ...
#include <windows.h>
#include <iostream>
static LONG WINAPI WindowsExceptionHandler(LPEXCEPTION_POINTERS ep) {
std::cerr << "FOO" << std::endl;
return EXCEPTION_EXECUTE_HANDLER;
}
void TerminateHandler() {
std::exception_ptr exception_ptr = std::current_exception();
try {
if (exception_ptr) std::rethrow_exception(exception_ptr);
} catch (const std::exception& e) {
std::cerr << e.what() << std::endl;
}
}
int main() {
SetUnhandledExceptionFilter(WindowsExceptionHandler);
std::set_terminate(TerminateHandler);
throw std::runtime_error("BAR");
}
вывод:
FOO
Я хочу, чтобы он вывел либо BAR
, либо FOOBAR
Комментирование SetUnhandledExceptionFilter
делает его работающим (но это неприемлемо, так как не поймает другие windows типы исключений).
Ясно SetUnhandledExceptionFilter
каким-то образом переопределяет std::set_terminate
в некотором роде?