iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++编译器是怎样实现异常处理
  • 120
分享到

C++编译器是怎样实现异常处理

2023-06-17 17:06:05 120人浏览 安东尼
摘要

本篇文章为大家展示了c++编译器是怎样实现异常处理,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。由于C++编译器装程序太多,此处无法上传,所以大家有commUnitysever的可以从里面获得然后反

本篇文章为大家展示了c++编译器是怎样实现异常处理,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

由于C++编译器装程序太多,此处无法上传,所以大家有commUnitysever的可以从里面获得然后反编译为自己所用。

与理则是一个极好的替代解决方案。它将正常代码 和错误处理代码清晰的划分开来,程序变得非常干净并且容易维护。本文讨论了编译器如何实现异常处理。我将假定你已经熟悉C++编译器处理的语法和机制。本文还提供 了一个用于VC++的异常处理库,要用库中的处理程序替换掉VC++提供的那个,你只需要调用下面这个函数:

struct EXCEPTioN_REGISTRATION  {      EXCEPTION_REGISTRATION* prev;      DWord handler;  };

之后,程序中的所有异常,从它们被抛出到堆栈展开(stack unwinding),再到调用catch块,***到程序恢复正常运行,都将由我的异常处理库来管理。
与其它C++特性一样,C++标准并没有规定编译器应该如何来实现异常处理。这意味着每一个编译器的提供商都可以用它们认为恰当的方式来实现它。下面我会 描述一下VC++是怎么做的,但即使你使用其它的编译器或操作系统①,本文也应该会是一篇很好的学习材料。VC++的实现方式是以windows系统的结 构化异常处理(SEH)②为基础的。

struct EXCEPTION_REGISTRATION  {      EXCEPTION_REGISTRATION* prev;      DWORD handler;  };

在本文的讨论中,我认为异常或者是被明确的抛出的,或者是由于除零溢出、空指针访问等引起的。当它发生时会产生一个中断,接下来控制权就会传递到操作系统 的手中。操作系统将调用异常处理程序,C++编译器异常发生位置开始的函数调用序列,进行堆栈展开和控制权转移。Windows定义了结构 "EXCEPTION_REGISTRATION",使我们能够向操作系统注册自己的异常处理程序。

#include   #include    using std::cout;   using std::endl;    struct EXCEPTION_REGISTRATION   {       EXCEPTION_REGISTRATION* prev;       DWORD handler;   };    EXCEPTION_DISPOSITION myHandler(       _EXCEPTION_RECORD *ExcRecord,       void * EstablisherFrame,       _CONTEXT *ContextRecord,       void * DispatcherContext)   {       cout << "In the exception handler" << endl;       cout << "Just a demo. exiting..." << endl;       exit(0);       return ExceptionContinueExecution; //不会运行到这   }    int  g_div = 0;    void bar()   {       //初始化一个EXCEPTION_REGISTRATION结构       EXCEPTION_REGISTRATION reg, *preg = &reg;        reg.handler = (DWORD)myHandler;        //取得当前异常处理链的"头"       DWORD prev;       _asm       {           mov EAX, FS:[0]           mov prev, EAX       }       reg.prev = (EXCEPTION_REGISTRATION*) prev;        //注册!       _asm       {           mov EAX, preg           mov FS:[0], EAX       }        //产生一个异常       int  j = 10 / g_div;  //异常,除零溢出   }    int  main()   {       bar();       return 0;   }    /*-------输出-------------------   In the exception handler   Just a demo. exiting...

C++编译器用于建立一个EXCEPTION_REGISTRATION结构的链表,每次注册新的EXCEPTION_REGISTRATION时,我们都要把原来注册的那个的地址存到prev中。 那么,那个异常回调函数长什么样呢?在excpt.h中,windows定义了它的原形: 注意EXCEPTION_REGISTRATION必须定义在栈上,并且必须位于比上一个结点更低的内存地址上,windows对此有严格要求,达不到的话,它就会立刻终止进程。

上述内容就是C++编译器是怎样实现异常处理,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网其他教程频道。

--结束END--

本文标题: C++编译器是怎样实现异常处理

本文链接: https://www.lsjlt.com/news/291441.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++编译器是怎样实现异常处理
    本篇文章为大家展示了C++编译器是怎样实现异常处理,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。由于C++编译器装程序太多,此处无法上传,所以大家有communitysever的可以从里面获得然后反...
    99+
    2023-06-17
  • C++编译器怎么实现异常处理
    这篇文章主要介绍“C++编译器怎么实现异常处理”,在日常操作中,相信很多人在C++编译器怎么实现异常处理问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++编译器怎么实现异常处理”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-17
  • C++ 函数异常处理在不同编译器实现上的差异有哪些?
    c++++函数异常处理在不同编译器中存在差异:异常抛出和捕获:大部分编译器使用throw抛出异常,用try-catch块捕获。gcc还支持__attribute__((nothrow))...
    99+
    2024-04-15
    c++ 函数异常处理
  • c++异常处理机制是怎么样的
    这篇文章主要介绍了c++异常处理机制是怎么样的,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。当一个程序出现错误时,它可能的情况有3种:语法错误,运行时错误和逻辑错误。语法错误...
    99+
    2023-06-17
  • C++中怎么实现异常处理
    这篇文章给大家介绍C++中怎么实现异常处理,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。C++异常处理程序在函数中查找catch块时,它首先要判断异常发生的位置是否在当前函数(发生异常的那个函数)的一个try块中。是则...
    99+
    2023-06-17
  • C++程序运行时异常处理是怎样的
    这篇文章主要介绍“C++程序运行时异常处理是怎样的”,在日常操作中,相信很多人在C++程序运行时异常处理是怎样的问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++程序运行时异常处理是怎样的”的疑惑有所帮助!...
    99+
    2023-06-17
  • Spring3.0.5 MVC的异常处理是怎样的
    本篇文章给大家分享的是有关Spring3.0.5 MVC的异常处理是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。SimpleMappingExceptionResolv...
    99+
    2023-06-17
  • SpringMvc异常处理器怎么实现
    这篇文章主要讲解了“SpringMvc异常处理器怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringMvc异常处理器怎么实现”吧! Spri...
    99+
    2024-04-02
  • C#异常怎么处理
    这篇文章主要讲解了“C#异常怎么处理”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#异常怎么处理”吧!异常是程序运行中发生的错误,C#异常处理是程序设计的一部分。在C#异常处理是通过Exc...
    99+
    2023-06-17
  • 怎样理解IronPython 编译器
    这篇文章将为大家详细讲解有关怎样理解IronPython 编译器,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。自 IronPython 正式发布以来,由于对 Python 语言的喜爱所驱使,...
    99+
    2023-06-17
  • C#中怎么处理异常
    在C#中,可以使用try-catch语句来处理异常。try块中包含可能会抛出异常的代码,而catch块中包含处理异常的代码。示例代码...
    99+
    2024-04-03
    C#
  • Python中怎么实现异常处理
    这篇文章将为大家详细讲解有关Python中怎么实现异常处理,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。导入必要的模块之后,animal.py使用connect()调用建立到服务器的连接。为...
    99+
    2023-06-17
  • SqlServer中怎么实现异常处理
    SqlServer中怎么实现异常处理,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。SQL Server常见的问题主要是SQL问题造成,常见的主...
    99+
    2024-04-02
  • 如何实现C++中的异常处理机制?
    如何实现C++中的异常处理机制引言:异常处理是编程中非常重要的一部分,它可以提高程序的可靠性和稳定性。在C++中,异常处理机制可以帮助我们处理程序中的错误和异常情况,使得程序的控制流能够在异常发生时进行变更,从而避免程序的崩溃。本文将介绍C...
    99+
    2023-11-02
    异常处理机制 (Exception Handling) C++异常 (C++ Exceptions) 异常处理语句 (E
  • C++ 技术中的异常处理:异常处理的陷阱和最佳实践是什么?
    在 c++++ 中处理异常至关重要,因为它允许程序检测和处理运行时错误。常见的陷阱包括未捕获的异常、过度使用异常和重复的异常处理。最佳实践包括使用 try-catch 块、特定异常类型、...
    99+
    2024-05-09
    c++ 异常处理
  • go怎么实现全局异常处理
    要实现Go语言的全局异常处理,可以使用defer和recover来捕获和处理panic异常。 在Go语言中,defer语句会在函数结...
    99+
    2023-10-20
    go
  • Java中怎样处理空指针异常
    程序中的变量是 null,就意味着它没有引用指向或者说没有指针。这时,我们对这个变量进行任何操作,都必然会引发空指针异常,在 Java 中就是 NullPointerExceptio...
    99+
    2024-04-02
  • JavaScript中的异常处理怎么实现
    这篇“JavaScript中的异常处理怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“JavaScript中的异常处理...
    99+
    2023-06-30
  • C++ 技术中的异常处理:异常处理的好处和原则是什么?
    c++++ 中的异常处理可增强代码健壮性、可读性、可维护性以及错误传播能力。原则包括:保证异常安全、及时处理、正确处理和避免滥用。实战案例中,try-catch 块用于捕获除数为零的异常...
    99+
    2024-05-09
    c++ 异常处理
  • 在C#程序编译另一个程序的实现方法是怎样的
    本篇文章为大家展示了在C#程序编译另一个程序的实现方法是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。C#程序编译编译前,要用到VS2005提供的一个编译工具 devenv.exe,这个在VS...
    99+
    2023-06-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作