您的位置:首页 > 其它

vc2012 异常捕获并处理

2015-08-12 00:20 239 查看
在处理大量数据的程序中,对于缓冲区处理稍有不慎,程序崩溃,然而在实际的使用中,我们的程序在发生错误之后不能停留在崩溃的界面上,必须立刻停止显示错误信息,重新启动程序。我本人也是长期未注意这个问题,始终抱着错误发生了那就研究一下错误码,但是未考虑程序不能停下来的问题。

程序由于缓冲区溢出而产生的系统错误提示只是使得错误的线程发生暂停而其它线程依然正常运行,那么这种情况下如果是服务器,那么我们所提供的服务即将终止,那么我们如何解决这个问题。SEH,异常捕获。在多次的测试中需将编译设置的启用c++异常处理选项设置为HSA。其余如下

使用如下函数hook系统的错误提示函数,参数为异常处理指针。

SetUnhandledExceptionFilter(MyUnhandledExceptionFilter);

LONG WINAPI MyUnhandledExceptionFilter(struct _EXCEPTION_POINTERS *pExceptionPointers)

{

SetErrorMode( SEM_NOGPFAULTERRORBOX );

char szPath[MAX_PATH]="";

::GetModuleFileNameA(NULL,szPath,MAX_PATH);

char szDirect[MAX_PATH]="";

::AfxMessageBox("错误提示!\r\bThis error warning test!");

//::GetCurrentDirectoryA(MAX_PATH,szDirect);

//::ShellExecuteA(NULL,"open",szPath,NULL,szDirect,SW_NORMAL);

::exit(-1);

return EXCEPTION_CONTINUE_SEARCH; //或者 EXCEPTION_EXECUTE_HANDLER 关闭程序

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: