#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <setjmp.h>
int *p=NULL;
int status;
jmp_buf envbuf;
int i;
LONG MyUnhandledExceptionFilter(
EXCEPTION_POINTERS *ExceptionInfo
)
{
p=&i;
// EXCEPTION_EXECUTE_HANDLER=1 已处理这个异常,程序正常结束
// EXCEPTION_CONTINUE_SEARCH = 0 不处理这个异常转交windows处理,就是弹出一个程序错误的框框
// EXCEPTION_CONTINUE_EXECUTION = -1 已修复这个错误,返回错误出现的地方继续执行,8过这个是相当困难的:P
//
// GetExceptionInformation(ExceptionInfo);
// printf("异常地址:0X%X\r\n",ExceptionInfo->ExceptionRecord->ExceptionAddress);
// printf("0X%X\r\n",ExceptionInfo->ExceptionRecord->ExceptionCode);
// ExceptionInfo->ContextRecord->Eip = (DWORD)GetMac;
printf("执行了异常!\r\n");
longjmp(envbuf,status);
return 1;
}
int main(int argc, char* argv[])
{
// SetUnhandledExceptionFilter(0);
//开始处理异常
LPTOP_LEVEL_EXCEPTION_FILTER pOldFucAddr = SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)MyUnhandledExceptionFilter);
status=setjmp(envbuf);
*p = 0;
printf("异常后是否执行这里了?\r\n");
//停止处理异常
// SetUnhandledExceptionFilter(pOldFucAddr);
return 0;
}
简单异常处理 且恢复
最新推荐文章于 2022-11-21 18:50:03 发布