调试时是否可以完全忽略catch块?

时间:2011-07-11 18:00:34

标签: c# .net debugging exception try-catch

我在WinForms(.net 3.5)中工作,并拥有以下代码行:

     HitTestResult result;
     try
     {
        result = this.HitTest( e.X, e.Y, ChartElementType.DataPoint);
     }
     catch(Exception e)
     {
        //This happens, we don't care!
     }

我无法控制HitTest是否会抛出异常,但如果确实如此,我绝对不在乎。

是否可以禁止我的IDE停止在此SPECIFIC catch块?我知道我可以禁用它可能抛出的System.FormatException(来自Debug-> Exceptions菜单,但这有点矫枉过正。

谢谢!

7 个答案:

答案 0 :(得分:16)

您可以使用DebbugerStepThrough属性跳过该行。来自MSDN:

  

指示调试器单步执行代码而不是单步执行   进入代码。

例如:

[DebuggerStepThrough]
public void MyMethod()
{
    HitTestResult result;
    try
    {
        result = this.HitTest(e.X, e.Y, ChartElementType.DataPoint);
    }
    catch (Exception e)
    {
        //This happens, we don't care!
    }
}

答案 1 :(得分:10)

如果您将代码分解为单独的方法,可以使用DebuggerStepThrough进行装饰,IDE将不会停止:

[DebuggerStepThrough]
public void SomeMethod()
{
    HitTestResult result;
    try
    {
        result = this.HitTest(e.X, e.Y, ChartElementType.DataPoint);
    }
    catch (Exception e)
    {
        //This happens, we don't care!
    }
}

答案 2 :(得分:6)

您可以将try / catch块放在自己的方法中,并使用以下任何属性修饰该方法:

DebuggerStepThrough - 使调试器跳过方法

DebuggerHidden - 隐藏调试器中的方法(甚至不允许断点)

DebuggerNonUserCode - 前两个的组合

答案 3 :(得分:2)

查看DebuggerNonUserCodeAttribute是否可以为您提供帮助。

答案 4 :(得分:1)

尝试,

 HitTestResult result;
 try
 {
    result = this.HitTest( e.X, e.Y, ChartElementType.DataPoint);
 }
 catch(Exception e)
 {       
    if(!Debugger.IsAttached)
    {
        //This happens, we don't care!
    }
 }

答案 5 :(得分:0)

为什么不这样做?

 HitTestResult result;
 try
 {
    result = this.HitTest( e.X, e.Y, ChartElementType.DataPoint);
 }
 catch(Exception e)
 {
 #if !DEBUG
    //This happens, we don't care!
 #endif
 }  

答案 6 :(得分:0)

我知道你想打破除之外的所有异常,但VS不提供此选项。

我建议重写HitTest()方法,使其正常处理失败,而不是允许抛出异常,例如通过验证输入参数。

更正: 0A0D的答案显示这是可能的,这对API调用或您无法控制的其他代码最有效。但是当你这样做时,你应该考虑重写它以优雅地处理错误。