结构化异常

Windows 结构化异常与 C / C++异常的一些事 一直以来对“异常”以及相关的知识很模糊,这次做个整理,回答几个基本问题以帮助对“异常”的理解: C语言的异常C语言版的try/catch: setjmp, longjmp C++的异常(try/catch)Windows 结构化异常,以及与C++标准异常的联系(__try/__except与try/catch)在Windows API 与标准C++代码混用的项目中,如何较好的捕捉所有异常? 阅读详情

终止处理程序
      1. (structured exception handling, SEH)结构化异常处理。
      不同的编译器针对SEH的实现不尽相同,这里采用Microsoft Visual C++ 编译器规定的语法。
      说明:不要混淆结构化异常处理与C++异常处理,c++异常处理在形式上表现为使用关键字catch和throw,这和结构化异常处理的形式不同。Microsoft Visual c++支持异常处理,它在内部实现上其实就是利用了编译器和windows操作系统的结构化异常处理功能。
      SEH实际上包含两方面的功能:终止处理(termination handling)和异常处理(exception handling).

       形式:_try {......}_finally{......}。_leave

注意:如果一个“栈耗尽异常”(stack exhaustion exception)发生在try代码块里,finally块就很可能得不到运行的机会,因为运行在出错进程里的WER代码都可能没有足够的栈空间去报告错误,所以在这种情况下,进程往往是不加任何提示地被终止。还有如果异常导致SEH链的中断,终止处理程序也不会得到执行。最后如果异常发生在异常过滤程序里,终止程序也不会得到执行。一条经验法则则是尽量限制在catch或者finally块中代码所做的工作。尽管绝大部分情况下,try块中的提前退出都会被终止程序所捕获,但是在进程或者线程被提前终止的情况下,系统没法保证finally代码块的执行。(abort内部调用的是ExitProcess).

      2. 内在函数是由编译器所识别并处理的特殊函数。编译器会为这个函数生成内联代码,而不是生成代码来调用这个函数,比如,memcpy是内在函数(如果打开编译开关/0i)。当编译器见到对memcpy的调用,它会直接将memcpy的代码放置到memcpy的函数里,而不是生成调用memcpy的代码,这样做通常让程序运行的更快,但体积更大。内在函数AbnormalTermination和memcpy的区别在于它只会以内置这一种形式存在。任何c/c++动态运行库都没有这个函数。我们只能在finally块里调用AbnormalTermination函数,它将返回一个布尔值来表明一个与当前finally块相关的try是否已经提前退出。异常TRUE.

 

细说windows的异常处理和实现——结构化异常 C++里面有使用异常处理的机制,但是那些需要throw catch捕捉等操作 而通常一个win程序,我们会因为各种原因导致其crash,而不一定是throw 了某个exception。我们需要这样一个机制,可以在程序因为各种原因crash时掌握程序的情况,并能够做点事情,这就是所谓的“优雅的结束”。win api恰为我们提供了这样一个函数SetUnhandledExceptionFilt 阅读详情

相关推荐

Windows平台下异常处理(二) - 结构化异常

Windows结构化异常在《Windows核心编程》中有大量篇幅做了介绍,这里面介绍的内容都基于书中的内容和自己的理解与研究。其实,在windows平台下,C++和C#的异常处理都是依靠Windows的结构化异常来实现的,大家可以依靠VS Debug来查看具体的信息. Windows结构化异常介绍Windows的结构化异常的大量实现是有操作系统和编译器共同完成的,其主要分为终止处理(terminat

leoleocs的专栏 835

深入解析结构化异常处理(SEH) - by Matt Pietrek

深入解析结构化异常处理(SEH) - by Matt Pietrek

dvlinker的技术专栏 5万+

8、理解结构化异常处理

本文详细探讨了结构化异常处理的概念、原理及在.NET平台中的实现方式。内容涵盖了异常的基本定义、异常处理的关键要素、System.Exception基类的作用、自定义异常的构建方法、多异常处理策略、异常状态配置、异常处理的最佳实践以及性能考虑等。通过实例演示了如何在C#中使用try/catch/finally块捕获和处理异常,并介绍了Visual Studio 2005中用于异常调试的工具。文章旨在帮助开发者更好地理解和应用结构化异常处理,提高程序的健壮性和可维护性。

zeta9的博客 106

C++结构化异常处理

什么是结构化异常处理 结构化异常处理(SEH)是C语言的Microsoft扩展,可以处理各种硬件或软件异常,由于只支持Windows,所以不具备可移植性。 try-except语句 __try { // guarded code } __except ( expression ) { // exception handler code } try-except语句可以使被保护的代...

天道酬勤 1550

结构化异常处理

结构化异常处理的部分资料,需要的拿去好好看看学学,大有裨益的啊

机器视觉学习(七)—— 卷积、边缘和滤波器

卷积运算、垂直边缘与水平边缘、滤波器

歆歆~黯了 2740

5.SEH(结构化异常处理)

当用户异常产生后,内核函数KiDispatchException并不是像处理内核异常那样在0环直接进行处理,而是修正3环EIP为KiUserExceptionDispatcher函数后就结束了。 这样,当线程再次回到3环时,将会从KiUserExceptionDispatcher函数开始执行。 KiUserExceptionDispatcher会调用RtIDispatchException函数来查...

My classmates 1402

90nm CMOS工艺下6μW超低功耗LDO设计实战:从原理图到版图全解析

本文详细解析了在90nm CMOS工艺下设计一款静态功耗仅为6μW的超低功耗LDO(低压差线性稳压器)的全过程。文章深入探讨了如何通过改进型翻转电压跟随器(FVF)架构实现无输出电容设计,在满足极低功耗和芯片面积高效(chip-area-efficient)要求的同时,确保环路稳定性与快速瞬态响应,为物联网、可穿戴设备等应用提供关键电源管理解决方案。

weixin_29196613的博客 272

结构化异常处理(SEH) 一

SEH 结构化异常处理(Structured Exception Handing)是Windows操作系统处理程序错误或异常的技术。 SEH是操作系统的一种系统机制,与特定的程序设计语言无关。 发生异常时系统的处理顺序 系统首先判断异常是否应发送给目标程序异常处理例程【如果决定应该发送,并且目标陈晓旭正在被调试,则系统挂起程序并向调试器发送EXCEPTION_DEBUG_EVENT消息。这个可以...

qq_36308972的博客 524

FPGA开发者必看:如何用SATA3.0主机控制器IP实现高速存储扩展(附Xilinx实测数据)

本文为FPGA开发者提供了基于SATA3.0主机控制器IP核的高速存储方案设计与优化指南。通过详细解析IP核架构、Xilinx FPGA平台集成实战及性能优化技巧,帮助开发者实现接近理论极限的540MB/s数据传输速度。文章还包含常见问题解决方案和高级应用场景拓展,是硬件工程师提升存储性能的必备参考。

weixin_30632089的博客 114

CVE-2017-7921漏洞深度剖析:从身份验证绕过到实战复现与防御

身份验证是Web应用安全的核心防线,其逻辑缺陷可能导致严重的未授权访问。身份验证绕过漏洞的原理在于,应用程序对特定请求路径或API接口的访问控制策略存在疏漏,未能执行有效的会话或令牌校验。这类漏洞的技术价值在于,攻击者无需凭证即可直接访问受保护的后端资源,从而获取敏感信息或执行未授权操作,对系统机密性、完整性构成直接威胁。在物联网和安防监控领域,大量网络摄像头、录像机等设备暴露于公网,其Web管理界面便成为常见攻击面。本文聚焦于安防设备中一个经典的CVE-2017-7921身份验证绕过漏洞,通过剖析其技术原

WGH100817的博客 468

C++异常和结构化异常的比较

应该使用哪种异常处理 结构化异常是操作系统提供的处理异常的方式,因此结构化异常不局限于处理C++语言的异常。 C++异常是处理C++语言的异常方式,当编译器识别出所要处理的异常是C++异常时,会针对C++语言特性做异常处理,比如局部类实例的析构等操作。 如果编译器是Windows的VS,则会将C++异常转化为结构化异常的一种特殊形式,VS编译器会在编译阶段将C++异常的try catch转化为_try _except,将throw转化为RaiseException()。 ...

HeMiJack的博客 562

IPv6之001-IPv6是什么

技术本质:IPv6(Internet Protocol version 6)是互联网工程任务组(IETF)设计的网络层核心协议,用于替代IPv4核心使命:解决IPv4地址枯竭问题,重构互联网基础架构,支撑万物互联时代革命性特征fill:#333;color:#333;color:#333;fill:none;IPv6128位地址空间无状态自动配置原生IPsec加密协议头部精简。

老韩的Linux云计算架构师进阶之路 1390

结构化异常及崩溃捕获

第一篇    理论篇 1、进程的虚拟地址空间1.1              虚拟地址空间分区在Windows系统中,每个进程都被赋予它自己的虚拟地址空间,对于32位进程来说,这个地址空间为4GB(即0x00000000~0xFFFFFFFF)。当进程的一个线程正在运行时,该线程可以访问只属于它的进程的内存;属于所有其他进程的内存则隐藏着,并且不能被正在运行的线程访问。对于

程序人生 8274

基于深度学习的人脸识别考勤管理系统,采用YOLOv11和Dlib算法实现人脸识别和考勤签到,前台人脸识别和签到系统 + 后台人脸和考勤管理系统,全网独发

基于深度学习的口罩人脸识别的考勤管理系统,采用YOLOv11和Dlib算法实现人脸识别和考勤签到,前台人脸识别和签到系统 + 后台人脸和考勤管理系统,全网独发

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1824

NEU-DET 冷轧钢缺陷检测:基于 YOLOv8 的目标检测与可视化 UI 实现

冷轧钢的生产过程中,由于设备故障、工艺问题或者人为因素,钢板表面可能会出现多种缺陷,如划痕、裂纹、孔洞等,这些缺陷会严重影响钢材的质量。它比之前的版本(如 YOLOv5、YOLOv4)在速度和精度上都有显著提升,并且对硬件要求较低,适合进行工业界面和嵌入式系统的应用。这些版本相较于更大型的模型(如 YOLOv8x)具有更快的推理速度和较低的资源占用,适合工业生产线中的实时应用。通过将训练好的模型部署到工业生产线摄像头中,我们可以实现实时的缺陷检测,极大地提升生产效率和产品质量。

YOLO 736

结构化异常处理 与 非结构化异常处理 的区别

简单来说, 结构化异常处理是指使用包含异常的控制结构、隔离的代码块和筛选器来创建异常处理机制。  这样,您的代码可以区分不同类型的错误,并根据环境做出相应的响应。  在非结构化异常处理中,位于代码开头的 On Error 语句处理所有异常。 -------------------------------------------------------------

白话魔法师 3457

uniapp [安卓苹果App端] - 解决支付宝支付报错requestPayment:fail [payment支付宝:62009]未知错误,使用uni.requestPayment支付报错排查方案

uni-app支付宝,uniapp支付宝沙箱支付报错,uni.requestPayment,uniAPP App支付宝支付提示错误requestPayment:fail [payment支付宝:62009]未知错误,UNI-APP支付宝报错"code": -100,uniapp 解决安卓App使用uni.requestPayment实现沙箱环境支付宝支付报错,uniapp安卓app使用支付宝的沙箱环境支付时报了这个错,安卓端app支付宝支付,在沙箱测试环境测支付,提示“商家订单参数异常,请重新发起付款,选择

🏆 前端领域优质创作者 9609

结构化异常处理--具有结构化异常处理的计算器

概要: 本文承接上一篇名为“非结构化异常处理--具有非结构化异常处理的计算器”的博客。本文将计算器的代码用VB.NET语句写一个具有结构化异常处理的简单计算器,主要介绍VB.NET中的结构化异常处理的知识。 确定按钮的代码: Private Sub Button16_Click(ByVal sender As System.Object, ByVal e As System.Event

庞凡 坚定自己踏实走好每一步 1965

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

在VC++中混用C++异常和结构化异常

 在初学VC的时候,总以为try()catch(...)可以抓到所有的异常. 在开发之前开发的一个服务器程序中,才发现服务器经常莫名其妙的宕机了.一直觉得很诡异.   直到后来看了很多资料才明白结构化异常跟C++异常是两套东西,不统一。有些异常try.catch不一定能不抓到. 要将两种异常共同使用.下面的代码可以达到目的. 使用下面异常类,可以使程序更稳定.(注意:编译选项里面要记得打开 结

gisgan2006的专栏 2502

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

结构化异常处理SEH

结构化异常处理(seh)(Z)毕业的事情终于要搞定了,几个月前就答应要写这么一个文章,现在补上.结构化异常处理是一种操作系统提供的机制, 用来优化程序的结构,提供更加健壮的程序执行环境.试想想你写程序不用考虑哪里有个内存访问错误,哪里有个空指针等等一类的错误,一直按照程序的逻辑结构 向下写,而不用去检查函数是否成功,这会是多么愉悦的事情(这个乃是seh的宣传词,不代表我的观点,这里

rageliu的专栏 1294

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SEH结构化异常处理

千言万语从何说起呢?嗯,还是先说说SEH的特点吧:SEH的优点在于当你编写代码的时候,可以集中注意力完成任务,如果在运行的时候出现了问题,系统会捕获到错误并且通知你出了问题.使得SEH工作的任务主要落在编译器而不是操作系统上.当进入,退出异常块时候,你的编译器必须产生特殊的代码.编译器必须产生处理SEH的数据结构,还必须提供操作系统能调用的回调函数来使得异常块能被遍历.编译器还负责准备栈框

anikan_yu的专栏 2678

C++异常与结构化异常SEH的比较

结构化异常处理SEH(全称Structured Exception Handling),是Windows操作系统所提供的对错误或异常的处理机制,是Windows操作系统的一个重要组成部分。 在windows系统中,我们在开发应用程序时应该使用结构化异常还是C++异常?

拥抱变化 3212

非结构化异常处理-具有非结构化异常处理的计算器

概要 本文主要用VB.NET语句写一个具有非结构化异常处理的简单计算器,主要介绍VB.NET中的非结构化异常处理的知识。 计算器界面              计算器简单描述         单击数字和运算符输入公式。其中单击运算符按钮时,文本框Text属性中连接一个空格,然后连接“运算符”按钮的Text属性,在连接一个按钮。这样子“计算”按钮的click事件中,通过查找空格的位置,

庞凡 坚定自己踏实走好每一步 2528
上一篇: What static_cast is actually doing
下一篇: 内存管理(一)
SWenJing
博客等级 码龄18年 8粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值