...它会在发布版本中有效地成为一个空的 try-catch 吗?
或者它永远不会进入构建?
try
{
// do stuff...
// do stuff...
}
catch
{
Debugger.Break();
}
我知道调试器调用将不会被包含 - 显然,这是否也适用于 catch 我将其包装好了?
这是件坏事吗?它仅用于调试目的 - 我希望异常发生在它发生的地方,而不是它在堆栈冒泡之后离开我的地方。它更方便。
答案 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
}
}