Visual Studio 2015意外地破坏了已处理的异常

时间:2016-09-19 14:18:33

标签: c# exception visual-studio-2015 exception-handling break

图像值得很多,以下是可能的:

Visual Studio 2015 breaking while it should not

可以看出,Visual Studio 2015(最新版本)在Common Language Runtime ExceptionsException Settings取消选中,Enable Just My Code下的Tools > Options > Debugging被检查,并且异常清楚处理(在try / catch块中)。

该行失败并导致中断是对外部API的调用(这有点儿错误,因此是try / catch块)。

我是否遗漏了一些可以证明休息的理由或这是一个错误?我认为this other question会提供一些见解,但遗憾的是这里没有帮助(处理异常因此我们不需要启用其他Continue When Unhandled in User Code选项。

2 个答案:

答案 0 :(得分:1)

此异常有一个特殊情况,我猜这里适用。来自docs

  

AccessViolationException和try / catch blocks

     

从.NET Framework 4开始,如果异常发生在公共语言运行库保留的内存之外,则结构化异常处理程序中的catch语句不会处理公共语言运行库抛出的AccessViolationException异常。若要处理此类AccessViolationException异常,应将HandleProcessCorruptedStateExceptionsAttribute属性应用于引发异常的方法。此更改不会影响用户代码抛出的AccessViolationException异常,这些异常可以继续被catch语句捕获。对于为.NET Framework的先前版本编写的代码,您希望在.NET Framework 4上重新编译和运行而不进行修改,您可以将该元素添加到应用程序的配置文件中。请注意,如果已为AppDomain.FirstChanceException或AppDomain.UnhandledException事件定义了处理程序,则还可以接收异常通知。

正如文档所说,解决方案是将HandleProcessCorruptedStateExceptionsAttribute添加到Start()方法。如果不可能(例如,这是通过库提供的),我猜你可以添加一个包装调用的方法,并将该属性添加到该包装方法。

答案 1 :(得分:0)

您可以在以下链接中查看答案 How to handle AccessViolationException

由于许多原因,在.NET 4.0中,运行时将一些异常处理为Windows结构化错误处理(SEH)错误,作为损坏状态的指示符,并且这些异常不能作为常规异常捕获。

享受