我在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菜单,但这有点矫枉过正。
谢谢!
答案 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调用或您无法控制的其他代码最有效。但是当你这样做时,你应该考虑重写它以优雅地处理错误。