【发布时间】:2014-02-11 13:03:55
【问题描述】:
我在 StackOverflow 和 CodeProject.net 上阅读了很多关于 SEH exceptions 的文章。
在我的 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;
}
【问题讨论】:
标签: c++ exception stack-overflow seh