首页 > 编程语言 >C#中的System.AccessViolationException异常捕捉

C#中的System.AccessViolationException异常捕捉

时间:2023-08-02 14:46:25浏览次数:23  
标签:C# System try program catch 异常 AccessViolationException

我们经常使用try-catch来捕捉异常,但从.NET 4.0开始异常处理机制有所改变,导致AccessViolationException这类异常无法通过try-catch捕捉,而导致程序崩溃。

官方解释

AccessViolationException当代码尝试读取或写入尚未分配或无权访问的内存时,非托管或不安全代码中会发生访问冲突。这种异常一般都是严重错误。

从.NET Framework 4 开始,AccessViolationException如果异常发生在公共语言运行时保留的内存之外,则结构化异常处理程序中的 语句不会处理catch公共语言运行时引发的异常。 若要处理此类 AccessViolationException 异常,请将 HandleProcessCorruptedStateExceptionsAttribute 属性应用于引发异常的方法。

解决方案

方案一:不修改代码,通过config配置来统一设置为.NET 3.5异常处理机制。

<configuration>
   <runtime>
      <legacyCorruptedStateExceptionsPolicy enabled="true" />
   </runtime>
</configuration>

方案二、修改代码,增加特性,针对某个函数有效。

[HandleProcessCorruptedStateExceptions] 
[SecurityCritical]
public static int Main() 
{ 
   try
     {
       // Catch any exceptions leaking out of the program CallMainProgramLoop(); 
     }
   catch (Exception e) 
     {
         // The exception we caught could have been a program error
        // or something much more serious. Regardless, we know that
        // something is not right. We'll just output the exception 
       // and exit with an error. We won't try to do any work when
       // the program or process is in an unknown state!

        System.Console.WriteLine(e.Message); 
        return 1; 
     } 
  return 0; 
}

标签:C#,System,try,program,catch,异常,AccessViolationException
From: https://www.cnblogs.com/liweis/p/17600619.html

相关文章

  • MappingJackson2HttpMessageConverter数据处理
    主键用的雪花算法,值域超过了js的范围……后端返回的日期字段总不是我想要的格式……空值的字段就不要返回了,省点流量吧……试试换成自己的MappingJackson2HttpMessageConverter呗Talkischeap,showyouthecode!importcom.fasterxml.jackson.annotation.JsonInclude;importco......
  • Docker部署Nginx
     docker安装nginx1.下载nginx镜像dockerpullnginx2.创建nginx挂载目录    mkdir-p/usr/local/nginx/{conf,html,log,ssl}3.启动nginx容器,用于copy一些文件放在步骤2的目录下     dockerrun--namenginx-p80:80-dnginx4.将nginx容器下文件,copy到步......
  • 多任务派发线程处理示例supplyAsync
    packagecom.cytc.test;importjava.util.ArrayList;importjava.util.List;importjava.util.Random;importjava.util.concurrent.CompletableFuture;importjava.util.concurrent.LinkedBlockingQueue;importjava.util.concurrent.ThreadPoolExecutor;importjava......
  • Android View绘制原理 - SkCanvas
    上一篇文章介绍了在Android框架中的各种Canvas,其中C层的RecordingCanas承上启下,在SkiaRecordingCanvas的绘制方法会通过调用它的mRecorder来记录,而这个mRecorder的类型正好就是SkCanvas,准确的说是它的子类RecordingCanas。而各种绘制方法会对应生成一个Op对象来描述这个绘制操作,Rec......
  • STM32 cubemx配置USART DMA传输
    (文章目录)前言本篇文章来讲解DMA的概念,并使用DMA来进行串口的数据收发。一、DMA概念DMA(DirectMemoryAccess,直接内存访问)是一种计算机系统的技术,允许外部设备(如硬盘驱动器、网络适配器或图形卡)直接与计算机内存进行数据传输,而不需要CPU的直接参与。这种直接的内存访问可以提......
  • 工业智能网关快速实现OPC数据采集和上云监控
    OPC协议是工业自动化领域常见的通信协议之一,广泛应用于工业控制、智能制造、自动化生产等领域。它可以实现不同设备和系统之间的数据交换和通信,提供了实时监测、数据采集、远程控制和故障诊断等功能。例如,在化工、食品、制药、汽车等工业领域,OPC可以连接不同的传感器、仪器设备和控......
  • 为什么参与LiveVideoStackCon 2022 北京站
    距离2022年11月4日至5日召开的LiveVideoStackCon2022音视频技术大会北京站还有一个多月的时间,在我们紧锣密鼓地筹备下,又有一波精彩的演讲内容、新颖的互动环节、神秘的幕后团队等信息上线啦。现在,马上开启剧透模式,让大家一睹为快!精彩内容抢先看围绕着「音视频+无限可能」这个......
  • pyecharts Graph图表类型
    frompyechartsimportoptionsasoptsfrompyecharts.chartsimportGraphnodes=[{"name":"节点1","symbolSize":30},{"name":"节点2","symbolSize":20},{"name":"节点3&......
  • project
    编译构建链接OHPMCLI链接安装依赖npm包安装依赖:ohpm包安装示例库tpc_resourcenpm包引用在会有问题,带解决TODO安装的npm需要在oh-package.json5中"@ohos/httpclient":"file:./node_modules/@ohos/httpclient"引用本地包将node-modules中@ohos->httpclie......
  • POJ 3020 Antenna Placement
    \(POJ\)\(3020\)\(Antenna\)\(Placement\)一、题目描述*--代表城市,o--代表空地给城市安装无线网,一个无线网最多可以覆盖两座城市,问覆盖所有城市最少要用多少无线。公式:最小路径覆盖=总节点数-最大匹配数我们要尽可能多的建立能覆盖两个城市的基站(二分匹配最大匹配),剩下的......