程序崩溃的处理

恼人的程序崩溃框,如何解决,当然正道还是努力调试你的程序,找出BUG所在。

不过这里要介绍的是消极处理办法,即如何消除这个崩溃框。

其实很简单,也有很多方式:

1,在程序启动时用一句SetErrorMode(SEM_NOGPFAULTERRORBOX);

它就可以实现不让那个崩溃框弹出来,而是直接关闭程序,进程莫名消失。

当然你若想让进程始终运行,那就另外弄个检测程序,一分钟检查一次,若进程没有就重新运行。也是xyntservice开源软件既能把进程弄成服务方式运行,也能定期检查程序在不在。

 

2,自己注册一个函数,用于处理这种没人管的异常崩溃。

LONG WINAPI myUnhandledExceptionFilter(struct _EXCEPTION_POINTERS *ExceptionInfo)
{
 //自己的其它处理,如保存错误记录文件,启动一个新的本程序
 return EXCEPTION_EXECUTE_HANDLER; //表示直接退出程序
}
程序启动时调用 SetUnhandledExceptionFilter(myUnhandledExceptionFilter);

这样我们就可以记录下出错的信息(包括汇编代码位置,寄存器值等),便于分析。而且这样退出同样不会让人看到出错框,还能马上就重启一个新的程序,减少程序中断时间。

3,如果想霸道的让程序继续运行,管他有什么错,或许这个错并不严重,继续转下去又好了呢。怎么办,VB可是有个on error resume next的功能。VC编的程序如何坏了还要继续向下运行。

这就需要改一下刚才的异常处理函数,仅仅是先修改当前EIP(指令寄存器)位置,然后返回继续执行。

LONG WINAPI myUnhandledExceptionFilter(struct _EXCEPTION_POINTERS *ExceptionInfo)
{
 ExceptionInfo->ContextRecord->Eip += X86IL(ExceptionInfo->ContextRecord->Eip,...);
 return EXCEPTION_CONTINUE_EXECUTION;
}

OK,X86IL是判断某地址处汇编指令长度的。

以上介绍了几个解决崩溃框的处理办法,记住上策还是努力解决程序问题。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值