2009-08-28 64 views
10

是否有一个编译指示或调试器属性,它允许调试器在抛出特定异常时不中断抛出特定异常即使在调试>>例外菜单下我已经告诉它在任何CLR异常抛出时会中断吗?Visual Studio中的任何方式不会抛出特定的异常?

一般来说,在开发过程中,我喜欢在调试时打破异常,以便我可以立即检查它们。有时会出现一些孤立的情况,我们知道这段代码偶尔会抛出异常,而我已经用try-catch来处理它。请参阅the answer to this question,其中共识是尝试抓住是最正确的情况。

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

顺便说一句,我目前在Visual Studio 2008中遇到过这种情况,但我猜测对于所有版本或者没有答案。

回答

9

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

我发现我得到更多的使用DebuggerStepThrough属性。通常,我将抛出异常抛出(默认情况下,调试>异常用户未处理的checked和thrown取消选中)并为我不感兴趣的方法添加DebuggerStepThrough属性,也不关心任何异常抛出在该方法内。我很少使用DebuggerHidden,并在库代码中使用DebuggerNonUserCode

+0

'Debug' >>'Exceptions'实际上是我启用它的菜单(Tools是一个错字)。我想打破所有异常,除了这个特殊的异常实例(例如'IOException'或其他常见的异常,所以我不能关闭所有的异常)。 它看起来像DebuggerStepThroughAttribute是我正在寻找的答案。我不认为这也会影响例外。谢谢! – mckamey 2009-08-30 15:00:47

+1

额外信息:DebuggerStepThrough只会抑制在该方法中直接引发的异常。它不会抑制调用堆栈中较低的任何异常。 – 2010-09-22 09:32:09

+0

我不知道最近是否有事情发生了变化(在VS2015中,也许?) - 但我有一个异常,在我的方法中被捕获和处理,并且没有异常被重新抛出 - 该方法具有“DebuggerStepThrough”属性,但它仍然停止 - (虽然在堆叠中有一层) - 当我打F10时,它像正常一样进入下一行 - 但为什么它在那里停下来呢?该方法没有重新抛出任何东西,但DebuggerStepThrough表现得像它冒出来一样...... - 我可能会尝试一些其他提到的属性。 – BrainSlugs83 2016-02-05 21:46:52

相关问题