选择性地忽略C#代码中抛出的异常
我在C#代码中有一个函数,其中周期性地抛出NullReferenceException(预期行为),但被捕获。有没有一种方法可以告诉VisualStudio调试器不要在代码的这一特定部分出现此异常时中断选择性地忽略C#代码中抛出的异常,c#,debugging,C#,Debugging,我在C#代码中有一个函数,其中周期性地抛出NullReferenceException(预期行为),但被捕获。有没有一种方法可以告诉VisualStudio调试器不要在代码的这一特定部分出现此异常时中断 编辑我需要在代码的其他地方中断此异常,但不是在同一个函数中。如果我理解正确,并且您试图做的是调试一些NullReferenceException,但希望在调试时暂时忽略其他异常,可以通过使用属性标记希望调试器忽略的函数来实现这一点 [DebuggerNonUserCode] private vo
编辑我需要在代码的其他地方中断此异常,但不是在同一个函数中。如果我理解正确,并且您试图做的是调试一些NullReferenceException,但希望在调试时暂时忽略其他异常,可以通过使用属性标记希望调试器忽略的函数来实现这一点
[DebuggerNonUserCode]
private void MyMethod()
{
// NullReferenceException exceptions caught in this method will
// not cause the Debugger to stop here..
}
注意只有在所述方法中捕获异常时,这才有效。只是如果将调试器设置为总是在
NullReferenceException
异常时中断,它们不会导致调试器中断。这只适用于方法,而不是方法内部的任意代码段。您可以这样做,但它会影响解决方案中的所有异常
调试->异常->查找。。。“Null Ref”
,取消勾号抛出。假设调用方没有出现异常,这可以通过以下方法实现
从评论中
Visual Studio 2005调试器不会在标记为的方法中停止
此属性,不允许在中设置断点
方法
一个很好的方法就是不要让它发生。为什么你不能阻止它呢?可能是他无法控制的外部代码不是我不能,而是我继承的代码,在修复一些困扰它的错误之前,我尽量不接触太多。基本上,我有一些快速修复方法,在我去重写任何东西之前,我需要去客户那里。这实际上非常适合我需要做的事情。这不是一个永久性的改变,或多或少只是一些帮助我现在调试的东西。不起作用。-至少在VS 2015中没有我用这个装饰了一个方法,异常被捕获并且不会冒泡,但是调试器仍然停止在那里。确保在VS>Tools>Options>Debugging>General中启用“Just My Code”选项。如果未启用此设置,则不会接受批注。对于我尝试执行的操作,指定[DebuggerNonUserCode]属性和[DebuggerHidden]属性之间的区别是什么?@BasedAsFunk-Clarity。如果您隐藏代码是因为(比如)它是生成的,并且最终用户不应该查看它,那么DebuggerNonUserCode会识别这个意图。但是,如果您希望有一个被调试器忽略的函数,则DebuggerHidden会标识该意图。不起作用。调试器只会停止一级。异常并没有冒泡,而是被捕获,但调试器的行为与它一样。(当你迈出这一步时,你可以清楚地看到它没有冒泡,但是中断仍然发生。--非常恼人。)再次,他仍然需要它来中断这个异常,在他的代码的其余部分,只有一个地方他想忽略它。
[DebuggerHidden]
private static void M()
{
try
{
throw new NullReferenceException();
}
catch (Exception)
{
//log or do something useful so as not to swallow.
}
}