Selectively ignore thrown exceptions in C# code

2020-03-03 08:26发布

I have a function in C# code where a NullReferenceException is thrown periodically (expected behavior), but caught. Is there a way I can tell the Visual Studio debugger to not break on this exception for this particular section of my code?

EDIT I need to break on this exception elsewhere in my code, but not in the same function.

标签: c# debugging
3条回答
我想做一个坏孩纸
2楼-- · 2020-03-03 08:48

You can do this, but it does effect all exceptions in the solution.

Debug -> Exceptions -> Find... "Null Ref", de-tick Thrown.

查看更多
放我归山
3楼-- · 2020-03-03 08:57

Assuming the exception does not bubble up to the caller, this can be achieved with DebuggerHiddenAttribute.

From the remarks

the Visual Studio 2005 debugger does not stop in a method marked with this attribute and does not allow a breakpoint to be set in the method.

    [DebuggerHidden]
    private static void M()
    {
        try
        {
            throw new NullReferenceException();
        }
        catch (Exception)
        {
            //log or do something useful so as not to swallow.
        }            
    }
查看更多
家丑人穷心不美
4楼-- · 2020-03-03 09:03

If I understand correctly and what you're trying to do is debug some NullReferenceException(s) but want to temporarily ignore others while debugging, you might be able to do this by marking functions that you want the debugger to ignore with the DebuggerNonUserCode attribute.

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

NOTE that this will only work if the exceptions are caught in said methods. It's just that they won't cause the debugger to break if you have the debugger set to always break on NullReferenceException exceptions. And that this only works on methods, and not arbitrary sections of code inside of a method..

查看更多
登录 后发表回答