【问题标题】:How to correctly ignore exceptions when debugging?调试时如何正确忽略异常?
【发布时间】:2019-01-30 05:31:15
【问题描述】:

我将我的 Visual Studio 异常设置设置为在引发“公共语言运行时异常”时中断。

我有许多例程可以捕获异常、处理它们并继续。当我调试我的程序时,我相信这些异常已得到正确处理,并且不希望调试器停止它们。

如何防止调试器在处理异常时停止? (注意,我想打破所有其他 CLR 异常)

我认为 DebuggerStepThrough 可以解决问题。然而事实并非如此。以下代码停在 'Method1();'

using System;

namespace ConsoleApp8
{
    class Program
    {
        static void Main(string[] args)
        {
            Method1();
        }

        [System.Diagnostics.DebuggerStepThrough]
        static void Method1()
        {
            try
            {
                throw new InvalidOperationException();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
        }
    }
}

-- 编辑-- Kirk - 我只在特殊情况下抛出异常。我使用 Visual Studio Tools for Office。这个 MS 库经常抛出可以处理和忽略的异常。

我想处理另一个库抛出的某些异常,但防止 VS2017 调试器在这些错误发生时停止。

需要明确的是,这些异常通常是 COM 异常。我不希望调试器忽略所有 COM 异常。我只希望调试器忽略我已捕获和处理的 COM 异常。

这可能吗?

【问题讨论】:

  • 您可以使用Console.Writeline(Exception) 让调试器不停止并忽略抛出的异常。
  • 嗨,亚历克西斯。我不认为你理解这个问题。我已更新代码示例以包含您的反馈。我的问题是代码停在'Method1();'行。
  • 为什么要在非异常情况下使用异常?也就是说,你永远不应该使用 try { int.Parse("a"); } catch {} 而不是 (if (!int.TryParse("a", out var i)) return false; stackoverflow.com/questions/729379/…
  • 在异常设置下,您可以指定要中断的异常。如果我只想调试特定功能,我将它们全部关闭,如果你想从某个地方调试某些异常,你可以:1)保持它们打开,当你逐步执行程序并弹出异常时,你可以禁用它,或告诉调试器不要中断来自某些库的异常(VS2017,不确定其他 VS 版本)。或者 2) 您可以在问题发生之前附加调试器并继续处理每个不需要的异常。

标签: c# debugging exception-handling visual-studio-2017


【解决方案1】:

调试器可以在抛出异常时中断执行,因此您可以在调用处理程序之前检查异常。在异常设置窗口(调试 > Windows > 异常设置)中,展开异常类别的节点,例如公共语言运行时异常。在那里你可以改变行为。

【讨论】:

    猜你喜欢
    • 2019-06-13
    • 2011-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 2017-08-27
    相关资源
    最近更新 更多