很多程序崩溃时,会d出如下类似的错误对话框:
如何让程序优雅地崩溃?优雅的崩溃是指:在程序崩溃时不d出如上面的对话框。
甚雹誉至更优雅的方法是:在崩溃之前时加入自己的对话框,用于用户向程序开发方报告这一崩溃现象。
今天客户反映我们的程序崩溃后就起不来了,其实我们为了方便无人化管理,做了一个守护进程。如果程序异常退出就会重启那个程序,这在linux下没问题,程序崩溃了就直接退出返回非零值,但是window就bug了,搞不好就给你d出个错误对话框,你不点掉其实程序就没退出,守护进程就不知道这个程序是否崩溃,于谨正是这个程序就永远死在那个窗口上了。现在这不仅碍眼,还碍事!于是着手摆平之。
先介绍一下
EXCEPTION_EXECUTE_HANDLER(1) 表示下面执行__except块内及其后面的代码
EXCEPTION_CONTINUE_EXECUTION(-1) 表示回到抛出异常处继续向下执行
EXCEPTION_CONTINUE_SEARCH(0) 表示查祥肆悔找下一个异常处理例程入口
#include "stdafx.h"
#include <windows.h>
#include <iostream>
using namespace std
long __stdcall callback(_EXCEPTION_POINTERS* excp)
{
wcout<<"sdfds\n"
return EXCEPTION_EXECUTE_HANDLER
}
int _tmain(int argc, _TCHAR* argv[])
{
SetUnhandledExceptionFilter(callback) // 加入这句后,不会d出错误对话框了,程序崩溃悄无声息地退出
char *p = 0
*p = 'p' // 程序走到此处会崩溃
return 0
}
不可能,因为这个对话框是内嵌在 VC Runtime Library 里面的;你神顷的代码既然调用了 CRT 的函数,就必须符合 CRT 的技术标准;
只要有错,就必定会d出这个对话框;
唯一的方法,就是修改你的代码,让你游蚂陆的代码没有错误,那就不会d物高这个东西了;
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)