#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堆栈恢复,布布扣,bubuko.com
WIN32堆栈恢复