В случае необработанного исключения С++ я хочу напечатать:
- Сообщение (
what()
) исключения С++ - Трассировка стека.
Чтобы получить трассировку стека, я использую SetUnhandledExceptionFilter
в сочетании с библиотекой StackWalker:
struct FooStackWalker : StackWalker
{
virtual void OnCallstackEntry(CallstackEntryType, CallstackEntry &entry) override
{
std::cerr << entry.lineFileName << " (" << entry.lineNumber << "): " << entry.undFullName << std::endl;
}
};
LONG WINAPI UnhandledExceptionHandler(LPEXCEPTION_POINTERS pointers)
{
FooStackWalker walker;
walker.ShowCallstack(::GetCurrentThread(), pointers->ContextRecord);
::TerminateProcess(::GetCurrentProcess(), 1);
}
int main()
{
::SetUnhandledExceptionFilter(UnhandledExceptionHandler);
}
Я получил трассировку стека, чтобы печатать очень хорошо, но теперь получить what
сложно.
Можно ли каким-либо образом декодировать исключение SEH как исключение С++ для вызова этой функции-члена до завершения?