6

我在 C# 代码中有一个函数,其中定期抛出 NullReferenceException(预期行为),但被捕获。有没有办法告诉 Visual Studio 调试器不要为我的代码的这个特定部分中断这个异常?

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

4

3 回答 3

12

如果我理解正确并且您尝试做的是调试一些 NullReferenceException(s) 但想在调试时暂时忽略其他异常,您可以通过使用DebuggerNonUserCode属性标记您希望调试器忽略的函数来做到这一点。

[DebuggerNonUserCode]
private void MyMethod()
{
    // NullReferenceException exceptions caught in this method will
    //  not cause the Debugger to stop here..
}

请注意,这仅在所述方法中捕获异常时才有效。NullReferenceException只是如果您将调试器设置为始终中断异常,它们不会导致调试器中断。并且这仅适用于方法,而不适用于方法内的任意代码部分..

于 2013-03-07T15:34:00.463 回答
2

假设异常不会冒泡到调用者,这可以通过DebuggerHiddenAttribute来实现。

从备注

Visual Studio 2005 调试器不会在标有此属性的方法中停止,并且不允许在该方法中设置断点。

    [DebuggerHidden]
    private static void M()
    {
        try
        {
            throw new NullReferenceException();
        }
        catch (Exception)
        {
            //log or do something useful so as not to swallow.
        }            
    }
于 2013-03-07T16:01:57.663 回答
0

您可以这样做,但它确实会影响解决方案中的所有异常。

Debug -> Exceptions -> Find... "Null Ref", 取消勾选 Throw。

于 2013-03-07T15:34:12.127 回答