#include <stdio.h> #include <windows.h> void die_recursion() { static unsigned long s=-1; printf("递归%lu次\n",++s); die_recursion(); } /* Return: 异常被忽略,控制流将在异常出现的点之后,继续恢复运行。 EXCEPTION_CONTINUE_EXECUTION (-1) 异常不被识别,也即当前的这个__except模块不是这个异常错误所对应的正确的异常处理模块。 系统将继续到上一层的try-except域中继续查找一个恰当的__except模块。 EXCEPTION_CONTINUE_SEARCH (0) 异常已经被识别,也即当前的这个异常错误,系统已经找到了并能够确认, 这个__except模块就是正确的异常处理模块。控制流将进入到__except模块中。 EXCEPTION_EXECUTE_HANDLER (1) */ int get_seh_info(int seh_code) { if(seh_code == STATUS_STACK_OVERFLOW) { printf("文件:%s<发生堆栈上溢>\n",__FILE__); return EXCEPTION_EXECUTE_HANDLER ; } else { return EXCEPTION_CONTINUE_SEARCH; } } int main() { int i=0; for(i = 0; i < 10 ;i++)//调用死递归10次 { __try { die_recursion();//死递归 } __except(get_seh_info( GetExceptionCode() ) ) { if( _resetstkoflw() ) { printf("恢复堆栈成功\n"); } else { printf("恢复堆栈失败\n"); } } } return 0; }
WIN32堆栈恢复
时间: 2024-11-06 21:16:26