异常处理讲解

异常处理机制

1异常处理流程

0.线程建立时, 系统安装一个 系统线程异常处理例程

1.异常发生时, Win2K/XP 控制权转移给 NTDLL.KiUserExceptionDispatcher 

2.如果你安装了线程相关的异常处理例程, 系统就把异常发送给你的处理例程,交由其处理. 

3.每个线程相关的异常处理例程可以处理或者不处理这个异常,如果他不处理并且安装了多个线程相关的异常处理例程, 
可交由链起来的其他例程处理. 

4.如果这些例程均选择不处理异常,系统线程异常处理例程将起作用, 调用 ZwQueryInformationProcess 判断是否被调试, 
没有调试并且你调用SetUnhandledExceptionFilter安装了最后异常处理例程的话,系统转向对它的调用. 

5.如果你没有安装最后异常处理例程或者他没有处理这个异常,系统会调用默认的系统处理程序,通常显示一个对话框, 
你可以选择关闭或者最后将其附加到调试器上的调试按钮. 
如果没有调试器能被附加于其上或者调试器也处理不了,系统就调用ExitProcess终结程序. 

6.不过在终结之前,系统仍然对发生异常的线程异常处理句柄来一次展开,这是线程异常处理例程最后清理的机会.
一般只用来释放资源, 不要试图修复什么. 注意只对线程异常有展开.

筛选器处理异常
#include "stdafx.h"
#include  "windows.h"
long WINAPI callback(_EXCEPTION_POINTERS *excp)
{
 MessageBox(0,"error","error",MB_OK);
 return EXCEPTION_EXECUTE_HANDLER;
}

int main(int argc, char* argv[])
{
 SetUnhandledExceptionFilter(callback);
 _asm int 3

 return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值