结构化异常处理和C++的异常处理区别

异常处理与CrashRpt工具——(1) 除此之外,我们可以为每一个异常设置若干处理函数,而这些处理函数会被放到一个链表中,当异常到达时,这些处理函数会被调用。语句不是这个异常错误所对应的正确异常处理模块,不能处理该异常,通知操作系统继续搜寻该线程其他的异常处理程序(系统将继续到上一层的。复合语句中的受保护执行的代码发生了异常,或受保护执行的代码调用的函数内部发生了异常并要求调用者来处理该异常,这样的语句是catch不到的,直接就会crash了,因为这是内存错误,硬件异常。中的代码,是在正常执行完之后进来的,还是因为全局展开或局部展开而进入的。 阅读详情

Windows异常由系统内核代码捕获,然后传递至用户层,多用于非法内存访问、指令错误等,其类型是CPU定义的,参见《X386保护模式编程》。
C++异常是C++编译器生成的结构(多在堆栈上),是普通的用户层代码,异常类型由用户自定义。
由于Windows异常处理和C++异常处理均使用堆栈展开,在局部堆栈的使用中存在冲突,一般不能混用。

__try{} __finally{}不会检查类内析构以及构造等操作
但是try() catch()不会存在这样的问题但是C++编译器上的所以异常类型需要你自己定义。

 

__try
 {
      ......
 }
 __except (EXCEPTION_EXECUTE_HANDLER)
 {
  wprintf(GetExceptionDescribe(GetExceptionCode()));
 }

 

 

#pragma once

typedef struct tagExcpCode
{
 DWORD dwCode;
 LPTSTR lpDescribe;
}EXCPCODE,*PEXCPCODE;


EXCPCODE g_excp_table[]=
{
 EXCEPTION_ACCESS_VIOLATION,
 _T("The thread attempts to read from or write to a virtual address for which it does not have access."),

 EXCEPTION_ARRAY_BOUNDS_EXCEEDED,
 _T("The thread attempts to access an array element that is out of bounds, and the underlying hardware supports bounds checking."),

 EXCEPTION_BREAKPOINT,
 _T("A breakpoint is encountered."),

 EXCEPTION_DATATYPE_MISALIGNMENT,
 _T("The thread attempts to read or write data that is misaligned on hardware that does not provide alignment. For example, 16-bit values must be aligned on 2-byte boundaries, 32-bit values on 4-byte boundaries, and so on."),

 EXCEPTION_FLT_DENORMAL_OPERAND,
 _T("One of the operands in a floating point operation is denormal. A denormal value is one that is too small to represent as a standard floating point value."),

 EXCEPTION_FLT_DIVIDE_BY_ZERO,
 _T("The thread attempts to divide a floating point value by a floating point divisor of 0 (zero)."),

 EXCEPTION_FLT_INEXACT_RESULT,
 _T("The result of a floating point operation cannot be represented exactly as a decimal fraction."),

 EXCEPTION_FLT_INVALID_OPERATION,
 _T("A floatin point exception that is not included in this list."),

 EXCEPTION_FLT_OVERFLOW,
 _T("The exponent of a floating point operation is greater than the magnitude allowed by the corresponding type."),

 EXCEPTION_FLT_STACK_CHECK,
 _T("The stack has overflowed or underflowed, because of a floating point operation."),

 EXCEPTION_FLT_UNDERFLOW,
 _T("The exponent of a floating point operation is less than the magnitude allowed by the corresponding type."),

 EXCEPTION_GUARD_PAGE,
 _T("The thread accessed memory allocated with the PAGE_GUARD modifier."),

 EXCEPTION_ILLEGAL_INSTRUCTION,
 _T("The thread tries to execute an invalid instruction."),

 EXCEPTION_IN_PAGE_ERROR,
 _T("The thread tries to access a page that is not present, and the system is unable to load the page. For example, this exception might occur if a network connection is lost while running a program over a network."),

 EXCEPTION_INT_DIVIDE_BY_ZERO,
 _T("The thread attempts to divide an integer value by an integer divisor of 0 (zero)."),

 EXCEPTION_INT_OVERFLOW,
 _T("The result of an integer operation causes a carry out of the most significant bit of the result."),

 EXCEPTION_INVALID_DISPOSITION,
 _T("An exception handler returns an invalid disposition to the exception dispatcher. Programmers using a high-level language such as C should never encounter this exception."),

 EXCEPTION_INVALID_HANDLE,
 _T("The thread used a handle to a kernel object that was invalid (probably because it had been closed.)"),

 EXCEPTION_NONCONTINUABLE_EXCEPTION,
 _T("The thread attempts to continue execution after a non-continuable exception occurs."),

 EXCEPTION_PRIV_INSTRUCTION,
 _T("The thread attempts to execute an instruction with an operation that is not allowed in the current computer mode."),

 EXCEPTION_SINGLE_STEP,
 _T("A trace trap or other single instruction mechanism signals that one instruction is executed."),

 EXCEPTION_STACK_OVERFLOW,
 _T("The thread uses up its stack."),

};
int g_excp_tableCount = sizeof(g_excp_table)/sizeof(g_excp_table[0]);

LPTSTR GetExceptionDescribe(DWORD dwCode)
{
 for (int i=0;i<g_excp_tableCount;i++)
 {
  if (g_excp_table[i].dwCode==dwCode)
  {
   return g_excp_table[i].lpDescribe;
  }
 }
 return _T("Unkown Exception!");
}

目标检测之Mask R-CNN(Pytorch):小白动手实现项目 目标检测之Mask R-CNN:小白动手实现项目Pytorch引言Mask R-CNN原理简述代码、注释及详细解释 引言 首先声明本项目的运行环境。操作系统为Windows,编写环境为Anaconda3 + Jupyter Notebook。Pytorch版本为 torch 1.7.1+cu110 、torchvision版本为 0.8.2+cu110,cuda版本为cu100,显卡为Nvidia 2060。 我是目标检测领域的小白,刚刚完成了Pytorch的相关入门学习任务,所以我认为学习本篇博客的基础 阅读详情

相关推荐

基于SHIS凝视型短波红外高光谱相机(900-1700nm)区分不同宝石的差异性和可分性(宝石分选)

SHIS系列凝视型高光谱相机基于液晶可调谐滤波器(LCTF),通过电控LCTF进行连续细分窄波段分光,对每个波段进行高分辨率的二维面阵成像,进行图像处理后,获得完整的高光谱高清图像序列。具有低功耗、小型化、使用方便和易于扩展的优势。其工作波段覆盖400nm至1000nm,能够捕捉宝石在不同波长下的光谱特征,为宝石鉴定提供了新的工具。

wayho的博客 710

从奔溃记录的dump中获取异常信息并解决的基本流程

本文由Markdown语法编辑器编辑完成。1. dump文件是什么?2. 如何基于dump文件获取程序奔溃信息3. dump解决问题示例:已知从一次奔溃中生成的dump文件中显示的异常信息为: Exception Information: The thread tried to read from or write to a virtual address for which it does no

inter_peng的专栏 2845

数分实战(01):Global_Superstore数据集解析与商业洞察

本文以Global_Superstore零售数据集为例,手把手指导数据分析实战全流程。从数据清洗、探索性分析到深度商业洞察,详细解析了如何通过Python处理缺失值与异常值,进行销售利润分析、客户细分与地理分析,并探讨了折扣与利润的微妙关系。文章旨在帮助读者建立数据分析思维框架,从数据中挖掘可指导实际业务决策的核心洞察。

weixin_28487433的博客 342

常见Win32异常错误码

Value Macro Meaning 0x80000002 EXCEPTION_DATATYPE_MISALIGNMENT The thread tried to read or write data that is misaligned on hardware that does not provide alignment. For example, 16-bit val

登山 8389

(侧边抽屉)移动端APP汉堡页设计全解:从规范落地到体验优化

汉堡页是一种隐藏式侧边导航组件,由汉堡图标(三条水平横线)、侧边抽屉面板、主界面遮罩层三部分构成。点击汉堡图标后,面板通常从左侧滑入,覆盖主界面部分区域(或悬浮于主界面之上);关闭时可通过点击关闭按钮、遮罩层、返回键或侧滑手势完成,是移动端特有的空间优化设计模式。

qq_67370502的博客 617

DPO(Direct Preference Optimization)直接偏好优化

本文介绍了DPO(直接偏好优化)方法,该方法通过简化传统的RLHF(基于人类反馈的强化学习)流程,直接利用人类偏好数据进行模型优化。DPO的核心思想是跳过奖励模型训练和强化学习交互步骤,通过数学推导将优化目标转化为仅与策略概率分布相关的形式。推导表明最优策略与奖励模型之间存在显式关系,从而可以构建直接优化策略的损失函数。与RLHF相比,DPO简化了训练流程,提高了工程实现稳定性,同时保持了同等效果。

TeenLucifer的博客 1956

SVN错误:Thread attempted to read nesting count of a lock it did not own

今天打开myeclipse 不知道为什么,更新程序的时候一直出现:“Thread attempted to read nesting count of a lock it did not own”这个错误,在网上查了资料 例如解决方法: 打开 : windows ->preferences->General->Appearance->Lable Decorations 勾选其中的 SVN 项...

jianglihua1986 976

基于Python的SEC Edgar文件高效爬取:最新技术与实战指南

本文详细介绍了如何使用Python最新技术高效爬取SEC Edgar数据库中的金融文件。我们将探讨SEC Edgar系统的结构、合法爬取注意事项,并使用现代Python库如Requests-HTML、aiohttp和Playwright实现多种爬取方案。文章包含完整的代码示例、性能优化技巧以及数据处理方法,为金融数据分析师、研究人员和开发者提供全面指导。关键词:SEC Edgar、Python爬虫、金融数据、异步爬取、Playwright、XBRL解析。

2201_76125261的博客 633

Linux Top 命令解析

TOP是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止.比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最“敏感”的任务列表.该命令可以按CPU使用.内存使用和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定. top - 12:38:33 up 5

zhiwei_yang的专栏 478

RV1126 ISP调参实战:3A算法参数调节的7个技巧

││ │ DEMOSAIC (去马赛克) │ ││ │ GAMMA (Gamma 校正) │ ││ │ DPC (坏点校正) │ ││。

小灰灰的博客 665

【Unity小游戏】整整一个周末写一款《皇室战争 玩法》 的 即时战斗类 游戏Demo。两万多字游戏制作过程+解析

Unity游戏制作,本篇文章介绍了复刻皇室战争玩法的一个自制小游戏,共有该游戏的两万字教程加制作过程,欢迎品尝! 世界上没有绝对的公平,如果我们起点就比别人第一步,那就更需要比别人努力了。

努力前行,总会成为自己心中的那道光 12万+

Access Violation(非法访问)错误的解决方法

Access Violation(非法访问),General Protection Fault(一般保护性错误)或者Invalid Page Fault(无效页面错误),虽然说法不一样,但本质上总是由同一种错误引起的。Access Violation常常在计算机用户运行的程序试图存取未被指定使用的存储区时遇到。 Access violation at address in module

crkres9527 6万+

2026.7.9:2026.7.9最新的Ubuntu26.04安装docker-ce

本文介绍了在Ubuntu 26.04系统上安装Docker CE的完整步骤。首先需要卸载旧版本的Docker组件,然后通过设置官方仓库进行安装。具体步骤包括:更新系统、安装必要依赖、添加Docker GPG密钥、配置稳定版仓库源、安装Docker Engine及containerd。文章还提供了安装特定版本Docker的方法,并说明了如何将用户加入docker组以获取权限,最后设置Docker开机自启。整个过程详细清晰,适合在Ubuntu系统上部署Docker环境的用户参考。

拥抱具身智能,昇腾Ascend C 517

C语言异常处理和结构化异常处理有什么区别?

原文:http://jsj.nhjsj.net/nh12/Cstudy/ShowArticle.asp?ArticleID=42 总的来说,结构化异常处理和异常处理之间的区别就是Microsoft对异常处理程序在实现上的不同。所谓的“普通”C++异常处理使用了三条附加的c++语句:try,catch和throw。这些语句的作用是,当正在执行的程序出现异常情况时,允许一个程序(异常处理程序)试着...

玄冬Wong 236

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

什么是 c++的结构化异常处理 SEH

SEH是Windows平台上处理系统级异常的有效工具,适合处理硬件异常和系统错误。尽管功能强大,但使用时需注意其平台依赖性和性能影响。

抟土成人祖,炼石补青天。眼中览银河,手可摘星辰。 687

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Visual C++ 里的异常处理

简介 微软Visual C++是Win32最广泛使用的编译器,因此Win32反向器对其内部工作非常熟悉。能够识别编译器生成的粘合代码有助于快速集中于程序员编写的实际代码。它还有助于恢复程序的高级结构。我将集中讨论MSVC编译程序中的堆栈布局、异常处理和相关结构。假设对汇编程序、寄存器、调用约定等有一定的了解。 名词解释: Stack frame — 堆栈帧,函数使用的堆栈段的片段。通常包含函数参数、返回调用方地址、保存的寄存器、局部变量和其他特定于此函数的数据。在x86(和大多数其他架构)上,调用者和被调

CoderAldrich的专栏 1591

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Windows核心编程:结构化异常处理

 作者:shenzi链接:http://blog.youkuaiyun.com/shenzi Windows核心编程:结构化异常处理     结构化异常处理(structured exception handling,SEH)带来的好处是我们在写代码时,可以先集中精力完成软件的正常工作流程。如果在运行的时候出现了什么问题,系统

shenzi的天空 3777

Windows核心编程笔记-Windows提供的结构化异常处理(SEH)

Windows提供的结构化异常处理(SEH)   1.结束处理主要是由编译器来实现,异常处理操作系统实现的要多一些   2.当异常块出现时,编译器要生成特殊的代码,并且生成一些表结构来处理SEH,另外还要生成     一些回调函数   3.SEH与C++的异常处理不同一、结束处理   1.使用形式   _try   {     //processing   }    _finally   {   

moonson的专栏 778

C和C++的主要区别

C语言和C++在语言本质、编译机制和关键字等方面存在显著差异。C语言是面向过程的结构化编程语言,强调通过函数和过程组织代码,适合系统级编程,但数据和行为的封装较弱。C++则支持面向对象和面向过程的混合式编程,提供类、封装、继承和多态等特性,适合构建复杂软件系统。在编译机制上,C语言直接生成目标代码,而C++通过名称修饰处理函数重载。此外,C++在C语言的基础上扩展了关键字和功能,如引用、模板等,使其更具灵活性和强大性。

weixin_43484713的博客 2186

try catch异常处理与SEH

转自:http://www.soft-bin.com/html/2010/08/06/try_catch_and_seh.html 作者: luckzj发表时间: 2010年8月6日本文链接: http://www.soft-bin.com/html/2010/08/06/try_catch_and_seh.htmlcopy right (c) http://soft-bin

duhaomin的专栏 3104

[笔记]Windows核心编程《二十三》结构化异常处理

文章目录前言总结1.SEH(Structured Exception Handling)和SJLJ(SetJump LongJump)区别对比 前言 总结 1.SEH(Structured Exception Handling)和SJLJ(SetJump LongJump)区别对比

二次元怪兽的博客 872

C,C++,MFC 异常处理(zz)

以前开发c,c++,mfc程序的时候,错误处理这部分一直比较混乱。因为历史上的原因,用c,c++,mfc开发windows程序时,很多api处理错误的方式是通过返回一个值,然后规定返回值什么时候代表成功,什么时候代表失败。如果想要得到更加具体的结果信息,就要调用GetLastError来获得错误代码(也可能是正确代码,与之相应的可以调用SetLastError设置错误代码)。我个人认为这种错误处理

afxid的专栏 4614

结构异常和C++异常

注: 本文原出处不详! Windows结构异常有如下几个特性: 1、它使用__try、__except、__finally和__leave关键字和RaiseException API; 2、它由Windows所支持,因此它不适合其它操作系统 3、它不处理C++对象

狂人山庄 744

C++和结构化异常处理

include "stdafx.h" #include using namespace std; class Exception { public:     static void MapSEtoCE(void ) ...{_set_se_translator(TranslateSEtoCE); }     operator DWORD() ...{ return er.ExceptionC

216

【Windows核心编程笔记】第二十五章 未处理异常、向量化异常处理与C++异常

SetUnhandledExceptionFilter 处理异常的最后机会,一般在进程初始化时调用此函数 异常过滤函数原型: LONG WINAPI TopLevelUnhandledExceptionFilter( PEXCEPTION_POINTERS pEx) UnhandledExceptionFilter函数详解 允许对资源进行写入操作并继续执行 将未处理异常...

半雨微凉 524

C和C++的区别

C和C++的区别 1.C语言的概念 C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点。应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适用于编写系统软件,三维,二维图形和动画,具体应用比如单片机以及嵌入式系统开发 2.C++的概念 C++是一种静态数据类型检查的,支持多重编程范式的通用程序设计语言。它支持过程化程序设计,数据抽象,面向对象程序设计,泛型程序设计等多种程序设计风格 C++由C发展而来的,与C兼容。用C语言写的程序基本上可以

如果可以我想再爱一次的博客 1681
上一篇: 用c++实现com组件示例
下一篇: 如何实现音频淡入淡出效果
sheltonwan
博客等级 码龄20年 77粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值