【问题标题】:Visual Studio 2015 unexpectedly breaking on handled exceptionsVisual Studio 2015 意外中断处理的异常
【发布时间】:2017-01-27 06:39:58
【问题描述】:

一个图像值得很多话,以下怎么可能:

可以看出,Visual Studio 2015(最新版本)在 Exception Settings 下的 Common Language Runtime Exceptions 未选中,Tools > Options > Debugging 下的 Enable Just My Code 被选中时中断,并且清楚地处理了异常(在 try/catch 块内)。

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

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

【问题讨论】:

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


【解决方案1】:

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

AccessViolationException 和 try/catch 块

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

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

【讨论】:

    【解决方案2】:

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

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

    享受

    【讨论】:

      猜你喜欢
      • 2023-03-26
      • 2010-09-12
      • 1970-01-01
      • 2016-10-05
      • 1970-01-01
      • 2017-09-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多