如何告诉调试器忽略抛出的异常并不中断程序?

24

我有一个文本框,在其中使用第三方库验证输入。但是,当语法不正确时,该库会抛出自定义异常。除了调试时,这不是太大的问题。

在调试时,由于文本框中的文本始终是错误的(我仍在输入它),调试器将在每个字母后停止,直到它正确为止,这真的很烦人,因为我要对每个字母进行验证。

如何告诉调试器不要在这些自定义异常处中断?

P.S. 我已经尝试过在“调试”->“异常”中过滤(将其添加到公共语言运行时异常中),但这对我没有用。调试器仍然会停在调用库的行。

P.P.S. 使用Visual Studio 2010。

非信徒们

答案:

最后我在我的P.S.陈述中非常接近。这是一个相当愚蠢的错误:命名空间中有一个拼写错误。感谢Pop Catalin和Madhur Ahuja指出这一点!


6
它有一个try/catch.. 但调试器仍然会在try块中断.. - Arcturus
@Arcturus:如果在“异常对话框”中取消选中所有项目呢? - Bobby
1
@Bobby,我并不想这样做... 我仍然希望调试器能够在其他异常上中断。 - Arcturus
你一定改变了默认设置,因为我从未见过它在尝试中崩溃。好吧,至少没有达到崩溃点。 - Jeff LaFay
@Arcturus,你在Visual Studio异常对话框中添加了完全限定的异常名称吗? - Pop Catalin
显示剩余3条评论
5个回答

19

13
假设您希望在异常出现时终止程序,您应该使用 [System.Diagnostics.DebuggerHidden] 方法来隐藏该方法以防止调试器拦截。

1
在MSVS 2015中,这种方法似乎存在一个错误。https://dev59.com/sJrga4cB1Zd3GeqPo5M4 - crokusek

9

调试+异常,点击添加按钮。将类型设置为“Common Language Runtime Exceptions”,名称设置为自定义异常的完整名称,包括命名空间名称。您现在可以取消此异常的Thrown框,在必要时首先展开节点。


非常准确,像魔法一样奏效。我在调试了6个月后每次都会抛出一个异常。 - msteel9999

4
这对我很有帮助:[DebuggerHidden]

10
不起作用,因为它会在带有 [DebuggerHidden] 标记方法的调用堆栈上一级停止调试器。但对于事件处理程序可能有效。 - Alex Klaus
@Klaus,同意,我不是一个人:https://dev59.com/sJrga4cB1Zd3GeqPo5M4 - crokusek

0
这不是调试器中的错误,而是一个有意的更改。虽然行为不同且可能令人困惑,但必须在Visual Studio 2010中进行更改以支持其他几种情况,包括Silverlight调试。
以下是解决方法:
  1. 禁用“用户未处理异常时中断”选项,对于您在此处遇到的异常类型(通过Debug -> Exceptions)
  2. 禁用所有异常的“用户未处理异常时中断”选项(通过Debug -> Exceptions)
有关更多详细信息,请参阅此链接。

在VS2010中中断异常


那个变化真的很糟糕,因为我想要未处理的异常上中断,但这些异常明显已经被处理了。 - BrainSlugs83

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接