Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
选择性地忽略C#代码中抛出的异常_C#_Debugging - Fatal编程技术网

选择性地忽略C#代码中抛出的异常

选择性地忽略C#代码中抛出的异常,c#,debugging,C#,Debugging,我在C#代码中有一个函数,其中周期性地抛出NullReferenceException(预期行为),但被捕获。有没有一种方法可以告诉VisualStudio调试器不要在代码的这一特定部分出现此异常时中断 编辑我需要在代码的其他地方中断此异常,但不是在同一个函数中。如果我理解正确,并且您试图做的是调试一些NullReferenceException,但希望在调试时暂时忽略其他异常,可以通过使用属性标记希望调试器忽略的函数来实现这一点 [DebuggerNonUserCode] private vo

我在C#代码中有一个函数,其中周期性地抛出NullReferenceException(预期行为),但被捕获。有没有一种方法可以告诉VisualStudio调试器不要在代码的这一特定部分出现此异常时中断


编辑我需要在代码的其他地方中断此异常,但不是在同一个函数中。

如果我理解正确,并且您试图做的是调试一些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.
        }            
    }