iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >.NET4中异常处理的新机制是什么
  • 847
分享到

.NET4中异常处理的新机制是什么

2023-06-17 14:06:52 847人浏览 八月长安
摘要

本篇内容介绍了“.net4中异常处理的新机制是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在.NET 4.0之后,CLR将会区别出一些

本篇内容介绍了“.net4中异常处理的新机制是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

在.NET 4.0之后,CLR将会区别出一些异常(都是SEH异常),将这些异常标识为破坏性异常(Corrupted State Exception)。针对这些异常,CLR的catch块不会捕捉这些异常,即使你用类似下面的代码:

try             {                  TestMethod();              }              catch (Exception e)              {                  Console.WriteLine("Catching exception: {0}", e);              }

也没有办法捕捉到这些异常。之所以要这样设计,在MSDN的文章Handling Corrupted State Exceptions里已经提到了。即,有一些支持插件的程序,例如Visual Studio或者SQL Server,它们支持调用托管代码编写成的插件,但是它们自己本身有很多代码是由非托管的c++写成的。由于插件经常会调用到非托管的api,而很多时间,这些插件的代码根本就不知道如何处理非托管的API抛出来的SEH异常。在4.0以前,因为SEH异常被转换成了跟普通.NET异常相同的异常,这样程序员只要用catch ( Exception e)的模式就可以捕捉到所有的异常。这样处理的问题是,由于SEH异常通常都不是托管代码抛出的,托管代码根本就不知道SHE异常被扔出来的原因,简单的catch ( Exception e)处理使得整个程序会处于一个非常不稳定的状态,使得前面被忽略的问题在后面以更严重的方式出现 — 例如保存被破坏的数据。这样,看起来使用catch ( Exception e)处理所有的异常的方法很简单,但实际上让程序员或者用户在问题延后发生时,分析起来需要花费更多的精力。

因此在4.0以后,大部分SHE(我怀疑是所有)异常都被标识成破坏性异常,在.NET里,默认情况下CLR不会捕捉它们,而是任由操作系统来处理—即关闭程序,并打开一个错误对话框通知用户。为了保证兼容性,在4.0以前编译的程序,例如在2.0、3.0和3.5编译的程序,依然采用的是老的策略—即.NET会同时捕捉.NET异常和SHE异常。而在4.0下面编译的程序才会使用新的策略,这也是在文章的开头,我的朋友所碰到的问题。你可以在.NET 4.0下面编译下面的程序,体验一下这个新变化:

Program.cs

using System;     using System.Runtime.InteropServices;       namespace ConsoleApplication1 {       class Program     {           [DllImport("Ref.dll")]           private extern static void TestMethod();           static void Main(string[] args)           {             try               {          TestMethod();               }               catch (Exception e)               {                   Console.WriteLine("Catching exception: {0}", e);               }           }     } }

Ref.cpp:

#include "stdafx.h"       extern "C" __declspec(dllexport) void TestMethod() {            int *p = NULL;                      // 会导致.NET抛出一个AccessViolation异常            *p = 10; }

上面的代码里,Program.cs使用P/Invoke技术调用了Ref.dll文件里的TestMethod,但是TestMethod尝试给一个空指针赋值,导致一个AccessViolation异常。如果你在2.0下面编译program.cs,并执行的话,这个AccessViolation异常会被catch(Exception e)捕捉到,而如果你在4.0下面编译并执行的话,你会发现catch (Exception e)是不能捕捉到这个异常的。

然而并不是所有人都想要这个新的异常机制,如果你的程序是在4.0下面编译并运行,而你又想在.NET程序里捕捉到SHE异常的话,有两个方案可以尝试:

   在托管程序的.config文件里,启用legacyCorruptedStateExceptionsPolicy这个属性,即简化的.config文件类似下面的文件:

App.config:

<?xml version="1.0"?> <configuration>  <startup>    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>  </startup>     <runtime>       <legacyCorruptedStateExceptionsPolicy enabled="true" />     </runtime> </configuration>

这个设置告诉CLR 4.0,整个.NET程序都要使用老的异常捕捉机制。

  在需要捕捉破坏性异常的函数外面加一个HandleProcessCorruptedStateExceptions属性,这个属性只控制一个函数,对托管程序的其他函数没有影响,例如:

[HandleProcessCorruptedStateExceptions]     static void Main(string[] args) {       try     {           TestMethod();       }       catch (Exception e)       {           Console.WriteLine("Catching exception: {0}", e);       } }

“.NET4中异常处理的新机制是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: .NET4中异常处理的新机制是什么

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

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

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

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

下载Word文档
猜你喜欢
  • .NET4中异常处理的新机制是什么
    本篇内容介绍了“.NET4中异常处理的新机制是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在.NET 4.0之后,CLR将会区别出一些...
    99+
    2023-06-17
  • PHP中的异常处理机制是什么?
    PHP是一种开源脚本语言,广泛应用于Web开发中。它有一个强大的异常处理机制,有助于开发人员更好地捕获并处理程序中的错误和异常。一、什么是异常?在编写程序时,会发生各种错误,比如无法找到文件、变量类型不匹配、数组越界等等。这些错误也称为异常...
    99+
    2023-05-14
    机制 PHP 异常处理
  • Struts2中的异常处理机制是什么
    这期内容当中小编将会给大家带来有关Struts2中的异常处理机制是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。声明式异常捕捉Struts2的异常处理机制是通过在struts.xml文件中配置<...
    99+
    2023-05-31
    struts2 st 异常处
  • qt异常处理机制是什么
    Qt异常处理机制是一种用于处理程序运行时的异常的机制。它允许开发人员捕获和处理在程序执行期间发生的异常,以便更好地控制程序的行为。Q...
    99+
    2023-09-22
    qt
  • java中异常处理机制的原理是什么
    Java中的异常处理机制是基于异常类的继承关系和异常处理代码块的机制。当程序发生异常时,会抛出一个异常对象,该异常对象会沿着调用链向...
    99+
    2023-08-31
    java
  • java异常处理机制原理是什么
    Java异常处理机制的原理是基于异常(Exception)的概念。在Java中,异常是指在程序运行过程中发生的错误或异常情况。当代码...
    99+
    2023-09-16
    java
  • Java线程的异常处理机制是什么
    本文小编为大家详细介绍“Java线程的异常处理机制是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java线程的异常处理机制是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。前言启动一个Java程序,本质...
    99+
    2023-07-02
  • php的错误和异常处理机制是什么
    本篇内容主要讲解“php的错误和异常处理机制是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php的错误和异常处理机制是什么”吧!一、PHP的错误处理错误类型在PHP开发中,错误通常分为三种...
    99+
    2023-07-05
  • c++异常处理机制是怎么样的
    这篇文章主要介绍了c++异常处理机制是怎么样的,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。当一个程序出现错误时,它可能的情况有3种:语法错误,运行时错误和逻辑错误。语法错误...
    99+
    2023-06-17
  • C语言异常处理机制的概念是什么
    这篇“C语言异常处理机制的概念是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言异常处理机制的概念是什么”文章吧。异...
    99+
    2023-06-17
  • Java异常处理机制有什么用
    这篇文章主要介绍了Java异常处理机制有什么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1.异常概述与异常体系结构1.1异常概述异常:在Java语言中,将程序执行中发生的...
    99+
    2023-06-25
  • Java7异常处理的新特性是什么
    本篇内容介绍了“Java7异常处理的新特性是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在程序中,错误可能产生于程序员没有预料的各种情...
    99+
    2023-06-17
  • Java异常的处理机制
    图片解析: 1.生成字节码文件的过程可能产生编译时异常(checked),由字节码文件到在内存中加载、运行类此过程可能产生运行时异常(unchecked), 2.JAVA程序在执行...
    99+
    2022-11-12
  • Java的异常处理机制
    本篇内容介绍了“Java的异常处理机制”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Java 异常处理异常是程序中的一些错误,但并不是所有的...
    99+
    2023-06-02
  • Spring MVC的拦截器与异常处理机制是什么
    这篇文章主要介绍了Spring MVC的拦截器与异常处理机制是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Spring MVC的拦截器与异常处理机制是什么文章都会有所收获,下面我们一起...
    99+
    2023-06-29
  • C++异常机制是什么
    今天小编给大家分享一下C++异常机制是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1. 异常处理机制介绍C++中的异常...
    99+
    2023-07-06
  • PHP中的异常及其处理机制
    目录什么是异常? 总结 上回文章中我们讲到了错误是编译和语法运行时会出现的,它们与逻辑无关,是程序员在码代码时不应该出现的,也就是说,这些错误应该是尽量避免带到线上环境的,他们不能通...
    99+
    2022-11-12
  • 详解SpringMVC中的异常处理机制
    目录开头1.ExceptionHandlerExceptionResolver2. demo开头 试想一下我们一般怎么统一处理异常呢,答:切面。但抛开切面不讲,如果对每一个contr...
    99+
    2022-11-13
  • C++中的异常处理机制介绍
    本篇内容介绍了“C++中的异常处理机制介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!异常处理增强错误恢复能力是提高代码健壮性的最有力的途...
    99+
    2023-06-17
  • Golang中异常处理机制详解
    前言 通常我们需要编写好的错误处理方式,在了避免某些程序员滥用异常,于是Go这里直接把异常这一块给砍掉了,最终还是通过返回值来判断程序的异常情况,毕竟Go可是支持多返回值的语言,比如...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作