为什么Visual Studio不会破坏未处理的外部异常?

时间:2017-10-26 09:56:32

标签: c# exception-handling asp.net-core-mvc visual-studio-2017

我正在使用Visual Studio 2017(15.4.1)开发在.NET Framework 4.6.2上运行的ASP.NET Core MVC 2应用程序。

我正在尝试让Visual Studio打破通过我的代码的所有未处理的异常。如何让Visual Studio打破从我的代码调用的外部库中抛出的未处理异常?

这些是我的设置:

  • 例外设置 - >投掷时休息:
    • 所有默认值。这意味着:
      • 几乎每次例外都不要打破。
      • 几乎每个例外,在用户代码中未处理时都不要继续。
  • 选项 - >调试 - >一般:
    • 启用我的代码
    • 使用新的Exception Helper。

请参阅以下代码段:

void ThrowExceptionInUserCode()
{
    // Exception helper doesn't pop up, and shouldn't.
    try { throw new Exception(); }
    catch (Exception) { }

    // Exception helper pops up, and should.
    throw new Exception();
}

void ThrowExceptionInExternalLibrary()
{
    // Exception helper doesn't pop up, and shouldn't.
    try { PopularLibrary.MethodThatFails(); }
    catch (Exception) { }

    // Exception helper doesn't pop up, and should.
    // This is the thing I'm trying to get to work.
    PopularLibrary.MethodThatFails();
}

请注意,我无法禁用“Just My Code”,因为ASP.NET有一个默认的异常处理程序,可以处理所有异常。

修改 由于我的问题已被标记为重复,因此我要说明为什么与其他问题相同。 另一个问题更为笼统。 '为什么Visual Studio在未处理的异常中不会破坏 。这对我来说非常好。 Visual Studio确实打破了未处理的异常。 Visual Studio only 不会破坏从外部库抛出的未处理异常,就像我指定的代码示例一样。

其次,原始问题有很多答案,但不回答原始问题。 (最初的提问者甚至在回复中提到了这一点。) 这些其他答案为许多用户解决了一个不同的问题,因此有许多赞成。

1 个答案:

答案 0 :(得分:0)

问题是ASP.NET Core捕获了所有异常,以便能够向客户端显示错误消息,而不是使HTTP连接崩溃。

因此从技术上讲,所有异常都是“已处理”的,因此不会被Visual Studio捕获。

理想情况下,Visual Studio未处理的异常代码会将其自身插入ASP.NET Core异常处理程序之前,但到目前为止还没有。