如果发生未处理的 C++ 异常,我想打印:
what()
C++ 异常的消息 ( )- 堆栈跟踪。
为了获取堆栈跟踪,我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 异常解码为 C++ 异常,以便在终止之前调用此成员函数?