C#不能捕捉的异常,如AccessViolationException
在.net的异常机制中,有部分严重的编程错误(系统的某些Corrupted State Exceptions异常)是默认不被用户使用常规的异常捕捉方式捕捉到的。
微软的这种设计方式,是让用户必须处理该异常,否则程序将无法正常运行。目前发现两种情况,但解决方法通用。
1、AccessViolationException异常
  AccessViolationException:当代码尝试读取或写入尚未分配或无法访问的内存时,非托管或不安全代码中会发生访问冲突。其只在可验证托管代码与非托管代码或不安全的托管代码交互出现。如果异常发生在公共语言运行库保留的内存之外,则公共语言运行库抛出的AccessViolationException异常不会由catch结构化异常处理程序中的语句处理,需要在方法前添加HandleProcessCorruptedStateExceptionsAttribute特性。
2、属性的get中调用栈的东西
如果属性的get方法中使用了调用栈的东西,可能会出现调用栈异常,最好变成方法(在编程建议中,get和set中不应该进行复杂的逻辑判断)。
如获得时间间隔的属性:
private long startRecordTime;
public double RecordInterval
{
get
{
double interval = ;
try
{
long tick = DateTime.Now.Ticks;
if (startRecordTime <= )
{
startRecordTime = DateTime.Now.Ticks;
}
interval = TimeSpan.FromTicks(tick - startRecordTime).TotalSeconds;
}
catch (Exception ex)
{
interval = ;
}
return interval;
}
}
在调用属性时,序列化可能会出现:“Cannot evaluate expression because a native frame is on the top of the call stack”问题。该异常与AccessViolationException类似,无法使用常规的try…catch捕捉到。
C#不能捕捉的异常,如AccessViolationException的更多相关文章
- Python 捕捉traceback异常栈信息
		
捕捉traceback异常栈信息 by:授客 QQ:1033553122 相关函数简介 sys.exc_info() 返回包含3个元素(type, value, traceback)的元组,提供关 ...
 - C# 异常处理最佳实践,解决代码分析提示CA1031:不要捕捉一般异常类型的解决办法
		
异常类型 异常一般分为系统异常 和 应用异常.系统异常有无法连接数据库,而应用异常是业务逻辑异常,比如授权失败. 在 C# 中异常基于 System.Exception,派生出 System.Syst ...
 - 【Android】 -- 使用UncaughtExceptionHandler捕捉全局异常
		
在综合统计SDK(欧盟统计局的朋友,百度统计)之后.有一个非常有利的功能测试:错误分析.此功能可以在程序的执行中遇到崩溃(runtimeException)反馈给server,帮助开发者提高产品.多功 ...
 - WPF 捕捉全局异常
		
public App() { //首先注册开始和退出事件 this.Startup += new StartupEventHandler(App_Startup); this.Exit += new ...
 - [四]SpringBoot 之 捕捉全局异常
		
在class注解上@ControllerAdvice, 在方法上注解上@ExceptionHandler(value = Exception.class),具体代码如下: package me.shi ...
 - python捕捉详细异常堆栈的方法
		
python中有 try——except 的方法捕获异常,可以获取到异常的种类以及自定义异常, 但是有时候对于debug测试来说,信息不全,比如说 触发异常的具体位置在哪: import traceb ...
 - winform捕捉全局异常
		
/// <summary> /// 应用程序的主入口点. /// </summary> [STAThread] static void Main() { try { //设置应 ...
 - delphi 捕捉全局异常错误的方法
		
private { Private declarations } public procedure GlobalExceptionHandler(Sender: TObject; E: ...
 - 在Main方法中设置异常的最后一次捕捉
		
在做Winfrom程序时,有时会遇到一个异常,可是这个异常不知道在什么地方发生的,程序会自动关闭,然后什么也没有了,在网上找到了一种方法,用来捕捉这种异常. 出现这种情况的原因是在程序中某些地方考虑不 ...
 
随机推荐
- Selenium Webdriver——Chrome调试Xpath
			
自己通过手写的Xpath要验证是否正确定位到元素,可以通过谷歌浏览器的Console功能(F12) 在console 输入:$x("") 定位去哪儿网的出发输入框: <inp ...
 - Requests抓取火车票数据
			
1.数据接口 https://kyfw.12306.cn/otn/lcxxcx/query?purpose_codes=ADULT&queryDate=2016-08-01&from_ ...
 - 一次点击两次触发addEventListener
			
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
 - 理解C# 4 dynamic(4) – 让人惊艳的Clay(转)
			
作者:Justrun名字来自<阿甘正传>,是希望自己能够更更傻一点. link: http://www.cnblogs.com/JustRun1983/p/3529157.html 理 ...
 - javascript数组操作(创建、元素删除、数组的拷贝)
			
这篇文章主要介绍了javascript数组操作,包括创建.元素的访问.元素删除.数组的拷贝等操作,还有其它示例,需要的朋友可以参考下 1.数组的创建 复制代码 代码如下: var arrayObj = ...
 - Spring Cloud Eureka高可用落地实战
			
一.原理 如图所示,多台Server端之间相互注册(这里以两台Server为例),Client端向所有的Server端注册. 二.Server端配置 1. 添加依赖 <dependency> ...
 - 《GB/T 20988-2007:信息系统灾难恢复规范》[中](国家质检总局 & 国标委)阅读笔记
			
第 0 章:引言 [感]GB/T 20988 引用了 SHARE 78 会议(标准)上的有关内容和思想,并结合国家重要信息系统行业技术发展和实践经验制定而成. GB/T 20988 提出了信息系统灾难 ...
 - 转载《spring定时任务轮询(spring Task)》
			
亲测可用 原文网址:http://blog.csdn.net/wanglha/article/details/51026697 本博主注:xmlns:task="http://www.spr ...
 - C/C++互相调用
			
参考: http://www.cnblogs.com/Yogurshine/p/3913073.html http://blog.chinaunix.net/uid-24118190-id-29853 ...
 - boost之内存管理
			
内存管理一直是令C++程序员最头疼的工作,C++继承了C那高效而又灵活的指针,使用起来稍微不小心就会导致内存泄露.野指针.越界访问等访问.虽然C++标准提供了只能指针std::auto_ptr,但是并 ...