【问题标题】:Any way in Visual Studio to not break on throwing of a specific exception?Visual Studio 中的任何方式都不会因抛出特定异常而中断?
【发布时间】:2010-11-23 21:23:54
【问题描述】:

是否有一个编译指示或调试器属性允许调试器在抛出特定异常时不会中断即使在“调试”>>“异常”菜单下我已经告诉它在任何情况下中断抛出 CLR 异常?

一般来说,在开发过程中,我喜欢让它在调试时中断异常,以便我可以立即检查它们。有时有一些孤立的情况,已知这段代码偶尔会引发异常,我已经使用 try-catch 处理了它。请参阅the answer to this question,其中一致认为 try-catch 是最正确的情况。

我希望能够在方法上设置一个属性(类似于 System.Diagnostics.DebuggerHiddenAttribute),它只是忽略方法中抛出的任何异常。

顺便说一句,我目前在 Visual Studio 2008 中遇到这种情况,但我猜要么所有版本都有答案,要么没有。

【问题讨论】:

    标签: visual-studio exception attributes debugging pragma


    【解决方案1】:

    直接的答案可以在 Debug 菜单的 Exceptions 菜单项下找到。这是每个解决方案/项目设置。 (工具 > 选项 > 调试是系统范围的设置。)有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/d14azbfh.aspx 的帮助主题 Visual Studio 调试器,如何:抛出异常时中断。 Exceptions 对话框允许您设置抛出哪些异常或哪些异常中断到调试器中。

    我发现DebuggerStepThrough 属性更有用。

    一般来说,我将抛出异常保留为默认值(调试 > 异常用户未处理选中和抛出未选中),并为我不感兴趣的方法添加 DebuggerStepThrough 属性,也不对任何异常感兴趣在该方法中抛出。我很少使用DebuggerHidden,并在库代码中更多地使用DebuggerNonUserCode

    【讨论】:

    • Debug >> Exceptions 实际上是我启用它的菜单(工具是一个错字)。我想打破除此特定异常实例之外的所有异常(例如IOException 或其他一些常见异常,因此我无法将它们全部关闭)。看起来 DebuggerStepThroughAttribute 是我正在寻找的答案。我认为它也不会影响异常。谢谢!
    • 额外信息:DebuggerStepThrough 仅抑制在该方法中直接引发的异常。它不会抑制调用堆栈中引发的任何异常。
    • 我不知道最近情况是否发生了变化(在 VS2015 中,也许吧?)——但我有一个异常被我的方法捕获并处理,并且没有异常被重新抛出——该方法有DebuggerStepThrough 属性,但它仍然停止——(尽管在堆栈中向上一级)——当我按下 F10 时,它像往常一样进入下一行——但它为什么会停在那里?该方法没有重新抛出任何东西,但 DebuggerStepThrough 的行为就像它冒泡了...... - 我可能会尝试提到的其他一些属性。
    猜你喜欢
    • 2020-04-04
    • 2013-06-02
    • 2019-10-06
    • 2020-03-02
    • 1970-01-01
    • 2017-05-20
    • 2011-05-31
    • 2018-04-07
    • 2021-04-17
    相关资源
    最近更新 更多