我可以让Visual Studio忽略异常的特定*实例*吗?

时间:2016-10-20 09:58:13

标签: c# visual-studio visual-studio-debugging

我正在使用第三方代码,该代码抛出并捕获NullReferenceException作为其普通正确操作的一部分。我希望能够告诉Visual Studio忽略此实例(即,忽略从此.cs文件+行号中抛出的NullReferenceException)但继续在其他抛出的NullReferenceException中断1}}秒。

这可能吗?

编辑 第三方代码我的意思是源代码,它是项目的一部分,但我并不拥有并且不会成为修改。例如,我无法使用任何依赖于VS 用户代码定义的内容,因为这也算作用户代码。项目的大小意味着这个细节不受我的控制。出于类似的原因,我不想添加[DebuggerHidden]

2 个答案:

答案 0 :(得分:3)

正如其他人所提到的,如果在第三方代码中真正捕获了并处理异常(其中调试器的定义是"第三方代码"是代码,在一个未经优化的程序集中,我们没有.pdbs,然后为了避免调试器停在它上面,你只需要转到Tools-> Options-> Debugging->一般并启用" Just My Code"。

如果相关代码是不是第三方代码,您可以向其添加DebuggerNonUserCode属性,以控制调试器是否会在装饰方法中的异常中断(再次假设&# 34; Just My Code"已启用。)

在VS" 15"预览5,您实际上可以disable breaking on an exception when it's thrown inside a specific module,但在VS2015中无法使用。

另一个快速解决此问题的方法是使用OzCode,它有一个工具栏按钮,用于切换"打破所有CLR异常"。这是一种启用/禁用所有异常的快速方法,您可以在知道即将发生恼人的NullReferenceException之前进行切换。 Break on all CLR exceptions

免责声明:我是我刚才提到的工具的共同创作者。

答案 1 :(得分:1)

如果我理解正确,您不希望代码在抛出异常后发生某个异常后停止执行。如果你想这样做,只需将try和catch块放在该代码上,并且不要使用throw语句

         try
     { string strX  = textbox.Text
       int x = Convert.ToInt32(strX);
     }
    catch (FormatException){}
    ...rest of code

如果你输入一个throw语句,它将退出它所在的代码块