我已經閱讀了StackOverflow和CodeProject.net中有關SEH exceptions
的許多文章。SEH StackOverflow異常 - 是否真的不可能捕獲?
當我在我的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;
}
你讀過[此知識庫文章](http://support.microsoft.com/kb/315937)? –