细说windows的异常处理和实现——结构化异常

本文详细介绍了Windows系统下的异常处理机制,包括C++的try...catch...throw机制以及结构化异常处理(SEH)。强调了C++异常处理仅能捕获部分异常,而Windows系统层提供了更全面的异常处理方式。通过设置SetUnhandledExceptionFilter,开发者可以自定义未处理异常的过滤器,从而在程序崩溃前进行操作,如记录错误信息或提供友好提示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

异常与C++的异常

C++编程中有一个重要的机制就是异常的处理,标准的C++定义了try...catch..throw的异常处理机制。但是这只是C++里的异常。

 

广义的异常可以分为硬件产生的异常软件产生的异常,像throw这样的动作就是在软件上产生一个异常,但是像写入一个非法内存、除0这些都是硬件产生的异常;

异常的处理可以分为结构化异常处理(Structured Exception Handling)SEH和向量异常处理(Vectored exception handling)VEH

 

C++里try...catch..throw属于SEH,但是他只能捕捉显示的throw出来的软件异常,明确这个问题非常重要。以前一直认为可以catch任何异常,其实这种想法是错的,比如写一句int* p=0;*p=1;这样的语句是catch不到的,直接就会crash了,因为这是内存错误,硬件异常。

 

这样看来,C++的try...catch..throw异常处理机制只是处理了所有异常中的一个子集而已。

然而在windows上开发的我们,尤其是去开发一些产品,我们希望有方法去处理任何异常,绝不让用户突然收到一个崩溃的感叹号,提高用户的体验怎么办?

原来window在系统层面上提供了更多的异常的处理机制,而C++的try...catch..throw也只是window系统的异常处理机制中被整合进去的一小块。

 

window系统层面的(结构化)异常处理机制

window是把所有的硬件和软件的异常都整合起来同等看待,无论是内存错误、用throw产生一个异常,都会触发操作系统对当前的线程的异常处理

每个线程在创建后,都会初始化一个数据结构:


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值