我读过很多关于SEH exceptions
StackOverflow 和 CodeProject.net 的文章。
在我的 C++ 程序中实现SEH exceptions
处理后,我受到了堆栈溢出异常的影响,我的软件没有捕获到该异常。
经过下一部分研究,我了解到,无法以编程方式检测到此类异常,因为我们没有可用的堆栈地址空间可供使用,因此程序内存已损坏。
想请教一下您在处理堆栈溢出异常方面的经验。这看起来像是一个挑战,如果在非托管代码编程语言中不可能,我真的很感兴趣?
下面我介绍我的示例程序 (C++) 的一部分,它再现了stack overflow exception
. 它适用于任何SEH exception
,但不是堆栈溢出:
LONG WINAPI SehHandler(PEXCEPTION_POINTERS pExceptionPtrs)
{
cerr << "Handled SEH exception!\n";
cerr << "ContextRecord: " << pExceptionPtrs->ContextRecord << endl;
cerr << "ExceptionRecord: " << pExceptionPtrs->ExceptionRecord << endl;
// Write minidump file
CreateMiniDump(pExceptionPtrs);
// Terminate process
TerminateProcess(GetCurrentProcess(), 1);
return EXCEPTION_EXECUTE_HANDLER;
}
int fib(unsigned int n) {
if(n == 0) return 0;
if(n == 1) return 1;
return fib(n-1)+fib(n-2);
}
int main(){
SetUnhandledExceptionFilter(SehHandler);
cout << fib(1000000);
return 0;
}