【发布时间】:2011-10-10 21:00:33
【问题描述】:
...它会在发布版本中有效地变成一个空的try-catch吗?
或者它永远不会构建?
try
{
// do stuff...
// do stuff...
}
catch
{
Debugger.Break();
}
我知道不会包含 Debugger 调用 - 很明显,但这是否也适用于我包裹它的 catch?
这是一件坏事吗?这只是为了调试目的——我想在它发生的地方看到异常,而不是在它冒泡堆栈后离开我的地方。只是更方便。
【问题讨论】:
-
您应该在
catch中throw无论如何,即使在Break()之后也是如此 -
“我知道不会包含调试器调用——显然”,这是不正确的。确实,当设置了
DEBUG常量时,Debug.xxx调用不包括在内,但Debugger.xxx调用总是包括。这是有道理的,因为否则您将如何强行导致发布版本中断?如果您只想在调试版本中使用它,请将其包装在一个方法中并将Conditional("DEBUG")添加到属性中。此外,Debugger.Launch()可能更适合您的场景。 -
所以,基本上,答案是 不,它不会导致一个空的 catch 块(它不会在发布版本中做你所期望的,它将显示 WER 崩溃对话框...)。
标签: c# debugging exception release try-catch