防止 Visual Studio 中断未处理的异常

Prevent Visual Studio from breaking on unhandled exceptions

我有一组 NUnit 测试(运行 使用 Resharper 测试运行器),其中一些失败是由于后台线程中发生的断言异常;当这种情况发生时,VS2017 会闯入调试器,这是不可取的,因为我希望它继续进行 运行 其他测试。

  1. "Exception Settings/CLR/Thrown"中的所有设置均已关闭。
  2. 无论我打开还是关闭 "Just My Code" 选项,该对话框中的 "User-Unhandled" 设置都不存在
  3. 所有 "Exception Settings/Managed Debugging Assistants" 设置已关闭。

关于如何防止它因这些异常而中断的任何其他想法?

我要提到的第一件事是断言异常不应传播到您的测试框架之外。如果是,那可能是因为一些我无法想象的偷偷摸摸的代码。换句话说,所有断言异常本质上都是 "handled",因为您的测试框架会为您处理它们。

还有一个 运行宁与调试测试的概念。如果您的意图是简单地忽略测试中所有地方的所有异常,那么您应该只选择 运行 - VS 根本不会附加调试器(然后无法中断)。我不知道在 resharper 的测试 运行ner 中这种差异是什么样的,但在 VS 中它分别位于 Test > RunTest > Debug 菜单下。

如果您无法重新设计您的测试,并且您想要调试其他异常(只是不是断言异常)或者您想要遇到断点,请阅读以下内容:

默认情况下,新调试器 (2015+) 会在未处理异常时中断 - 但您可以针对所有异常或仅针对特定异常关闭此行为。

  1. 打开异常设置window(调试>Windows>异常设置)
  2. 右键单击 "Common Language Runtime Exceptions"(或您要更改的特定例外)
  3. 在右键单击菜单中单击 "Continue When Unhandled in User Code"。

您现在应该会在 "Additional Actions" 列下方的 window 右侧看到文本 "Continue when unhandled in user code",并且 VS 应该不会再中断。

显然,这是 Visual Studio 中的错误。安装以后的更新已修复它。