如果我在catch中添加一个只有Debugger.Break()的try-catch块

时间:2011-07-22 08:30:21

标签: c# debugging exception release try-catch

...它会在发布版本中有效地成为一个空的 try-catch 吗?

或者它永远不会进入构建?

try
{
   // do stuff...
   // do stuff...
}
catch
{
    Debugger.Break();
}

我知道调试器调用将不会被包含 - 显然,这是否也适用于 catch 我将其包装好了?

这是件坏事吗?它仅用于调试目的 - 我希望异常发生在它发生的地方,而不是它在堆栈冒泡之后离开我的地方。它更方便。

4 个答案:

答案 0 :(得分:5)

不能直接回答您的问题,但您是否知道Visual Studio具有内置功能,可以在发生异常时直接中断?

您可以在Debug-> Exceptions(或Ctrl + Alt + E)

下找到该功能

请参阅http://stevesmithblog.com/blog/visual-studio-break-when-exception-thrown/

答案 1 :(得分:2)

这将导致一个空的catch块。为避免这种情况,您可以使用条件编译序列:

private void DoSomething()
{
#if DEBUG
    try
    {
#endif
        //do something
#if DEBUG
    }
    catch
    {
        Debugger.Break();
        throw;
    }
#endif
}

答案 2 :(得分:1)

如果这样做,它将在调试模式下中断,并在发布模式下忽略捕获的异常。它完全等同于在捕获时放置一个断点,它在释放模式下消失。就像在释放模式下有一个空的catch块一样。

答案 3 :(得分:0)

或者你可能更喜欢这个版本:

private void DoSomething() 
{ 
  try     
  { 
    //do something 
  }     
  catch     
  {
#if DEBUG
    Debugger.Break();
#else
    throw;  // throws the exception using original call stack.
#endif
  }
}