【问题标题】:Visual Studio debugging - ignore exception in one place while breaking at it elsewhere?Visual Studio 调试 - 在一个地方忽略异常,而在其他地方打破它?
【发布时间】:2009-10-29 16:03:05
【问题描述】:

我有一些代码在一个特定的行上生成大量 ArgumentExceptions(这是在不同的开发人员的代码中,所以我不能只是更改它),然后会被适当地捕获和处理。

我正在尝试调试在不同代码段中发生的 ArgumentExceptions(然后被捕获和处理,因此我不能只查看未处理的异常)。

是否有某种方法可以忽略源自该特定其他代码行的 ArgumentExceptions,同时仍会破坏在其他地方抛出的 ArgumentExceptions?

【问题讨论】:

标签: visual-studio debugging exception


【解决方案1】:

您也许可以这样做,但这取决于您要调试的代码相对于其他开发人员的代码的位置,以及您是否可以修改(但不能提交您的更改)他的代码。

您要做的第一件事是,至少暂时,转到菜单 Tools -> Options -> Debugging Visual Studio,然后勾选“只是我的代码”框。我认为即使在 Express 版本中也可以使用,但它可能不可用,如果它对您不可用,恐怕我要说的其余内容可能无济于事。

无论如何,一旦您勾选了该选项,您将不会再看到非“您的”代码的中断通知。这意味着来自不在 .sln 中的程序集的代码,或者来自 System.Diagnostics 的标有 [DebuggerNonUserCode] 属性的代码。然后我通常做的是用[DebuggerNonUserCode] 临时修饰有问题的方法,直到我完成了我需要调试的调试,然后在签入源控制之前恢复这些更改。

它没有我想要的那么优雅(我喜欢异常助手中的“不再中断从该站点抛出”复选框),但总比没有好。

我相信可能还有其他调试器设置可以与“仅我的代码”的工作方式交互,所以如果这对您不起作用,请告诉我,我会尝试更准确地了解我的设置当我这样做时的样子。

【讨论】:

【解决方案2】:

如果您谈论的是“Break On Throw”异常功能,那么没有。它只是一个严格的基于类型的功能,没有任何方法来控制代码的哪个部分引发异常。

您最好的选择是在所有从您关心的地方抛出或暂时暂停抛出异常的行上放置断点。

【讨论】:

    【解决方案3】:

    如果您知道如何调用它,我会在您的代码中设置断点,然后从那里进入 (F11)。你也可以打程序员直到他们修复他们的代码,这会让你感觉更好(除非你是一个和平主义者),也许他们的代码中不会有那么多 ArgumentExceptions (这可能会让你感觉更好即使你是和平主义者)。

    【讨论】:

    • 安东尼刚刚赢得了互联网!!!好吧... StackOverflow,而不是互联网。是的,很好......考虑到这是 4 1/2 年前,也许“只是”有点用词不当,但是......嗯......呃......哦,算了吧。接受胜利并继续前进!
    【解决方案4】:

    听起来像是使用异常作为流控制。如果您尝试调试的那个发生在程序的后面,您可以尝试稍后附加调试器,或者您可以等到程序运行后在抛出 ArgumentException 时打开中断。

    也尝试限制范围 - 如果您感兴趣的异常源自但不完全是 ArgumentException,请改为中断该异常。

    告诉其他开发人员修复他的代码。

    编辑:在 .NET 4 中,您可以将处理程序附加到 AppDomain.FirstChanceException 事件,过滤掉非 ArgumentException 异常并根据调用堆栈过滤掉坏的异常。

    【讨论】:

      【解决方案5】:

      cmets 中的链接很棒。

      我认为条件断点是您在这里寻找的。您可以通过右键单击断点并单击 Condition... 菜单项来执行此操作。

      【讨论】:

      • 不幸的是 Visual Studio 调试器不如 GDB;特别是,您不能将命令设置为异常来检查条件并在这是我们不想要的异常时继续。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多