【问题标题】:How to break on all exceptions when debugging except intentional exceptions调试时如何中断除故意异常之外的所有异常
【发布时间】:2020-10-16 04:56:18
【问题描述】:

我知道故意依赖程序流中的异常并不是一个好习惯。但也有必要的时候:

例如。我找不到不依赖异常返回错误值的 Json TryParse 方法。

我如何调试和中断除这些预期异常之外的所有异常?

-- 编辑(我还在为此苦苦挣扎)--

假设我使用第一个答案中显示的代码: How to make sure that string is valid JSON using JSON.NET

在某些情况下,代码会故意处理 JsonReaderException 并返回 false。

发生这种情况时,我不希望调试器在该行中断。但是我不希望在我的代码中的其他地方忽略 JsonReaderExceptions。

我可以只在这一种方法中忽略异常吗?

--

我发现我可以忽略整个程序集的异常类型 https://devblogs.microsoft.com/devops/break-on-exceptions-thrown-only-from-specific-modules-in-visual-studio-15-preview/

这种方法并不令人满意,因为我经常使用 COMExceptions,而且我不可能故意忽略程序集中的所有 COMExceptions。

我认为可以以更细粒度的方式忽略异常。我希望能够使用指示调试器继续的属性来装饰我的方法。类似于 [System.Diagnostics.DebuggerStepThrough]

【问题讨论】:

  • 把它放在try catch断点catch?还是我误解了你?
  • 如果我理解你可以使用 VS 的 Exception Settings 窗口来选择要中断的异常。即它停止在异常被抛出而不是在异常被捕获时停止。 this might help - blatant self-promotion

标签: c# debugging


【解决方案1】:

您可以从异常类派生并在此处设置断点:

class BreakOnException : Exception
{
    public BreakOnException (string message)
        : base(message)
    {
       //break point
    }

}

或使用例外设置:MSDN: Tell the debugger to break when an exception is thrown

【讨论】:

  • 谢谢。我将结合这两个答案。创建派生异常类,然后取消选中该异常类型。
【解决方案2】:

Debug菜单,Exceptions窗口,在CLR Exceptions旁边打勾

运行程序;现在一旦抛出异常,它就会中断,这可能是“太频繁了”

发生中断时,打开异常帮助工具提示面板,将“发生此类异常时中断”的勾去掉

这意味着您将逐渐消除您不感兴趣的异常类型,而无需在 Exceptions 窗口树中找到它们(这很痛苦)

【讨论】:

  • 我认为我的问题是我不想消除异常类型。我想消除一个特定的例外——请参阅上面编辑过的问题。
  • 您可以消除一种特定类型的异常,方法是全部勾选它们,然后在树中找到一个(展开 CLR 异常)并勾选它,但老实说,我发现勾选所有异常更容易它们打开,然后当出现我不想要的异常时,我在异常帮助程序中取消勾选“抛出此错误时中断”
  • 我想如果你知道你在哪里得到一个异常,你可以捕捉它并抛出一个你确实停止的不同的异常
  • 感谢您的回复。我不认为你明白我想要做什么。我不想消除一种特定类型的异常。我想消除一种异常类型的一个实例。
  • 我不知道有一种方法可以用异常窗口来做到这一点(可能有一种方法,我从来没有看过),但我想如果你能识别出异常的某些属性像“这是一个错误代码为 81234567 的 COMException”一样可靠,那么您可以在错误代码周围放置一个 try/catch/throw,并在条件为“break if ex.ErrorCode == 81234567”的条件下对 catch 进行断点
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 2012-11-02
  • 2013-04-13
  • 2012-08-15
  • 1970-01-01
相关资源
最近更新 更多