Win32结构化异常处理

SEH(Structured Exception Handling)是Windows系统提供的一种异常处理机制,它独立于编程语言,通过回调函数链表处理异常。当线程发生异常时,系统会调用链表中的函数直至异常被处理,若未定义处理函数则会追溯至上一层级直至默认处理函数,该函数通常会询问用户是否进行调试或终止进程。
摘要由CSDN通过智能技术生成

SEH(Structured Exception Handling)是windows系统提供的异常处理机制。这种机制独立于编程语言。通常情况下,开发人员不需要直接调用Win32中原始的与SEH相关的API函数,而是通过特定语言的类库(比如MFC)间接地使用SEH,特定语言的编译器会把他们转换为windows操作系统中相关API函数的调用。

SEH的思想:当某个线程在执行过程中出现异常时,它回调一个事先准备好的函数。

同一个线程可以有多个回调函数,每个回调函数负责处理一种类型的异常、这些回掉函数首尾相接构成一个链表,链表的末端是windows操作系统提供的默认处理函数。

操作系统为每一个线程都维护一个和新对象,在核心对象中,有一个指针指向这个异常回调函数链表。如下图:

当发生异常时,操作系统找到发生异常线程的异常回调函数链表,然后依次调用链表中的每个函数,当某个函数可以处理此异常时,它向操作系统返回一个特殊的值,这时,操作系统不再调用链表中后面的回调函数。

如果发生异常的线程没有定义异常回调函数链表,操作系统就到创建此线程的父线程中去找,最后一直追踪到最顶层的线程(即进程中第一个线程)。

进程的第一个线程是一定有一个异常回调函数链表的,而且此链表必定至少有一个默认异常回调函数,因为这是操作系统在启动进程第一个线程时自动创建的。

这就意味着,如果某进程没有定义任何的异常处理代码,而它在执行过程中又发生了异常,那么由默认异常回调函数来收拾残局。默认异常回调函数完成的工作通常是两项:

(1)询问用户是否调试此进程  (2)终止整个进程

如果用户选择调试,则用户可以选择将一个调试器附加到此进程进行调试,否则,操作系统讲强行终止整个进程和它所创建的所有线程,并回收其资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值