2

我们正在尝试更新我们的应用程序,以便提交它以获得 Vista 认证。部分要求是仅处理已知异常并让 Windows 错误报告处理所有未处理的异常。

我们的应用程序中有一个全局异常处理程序(订阅Application.ThreadException事件),在那里,我们对已知异常执行某些处理,但如果一个异常未知,我们希望将其抛出以供应用程序终止并 WER 处理。

如果我们重新抛出然后重新创建调用堆栈,我们看不到这样做并维护调用堆栈的方法。

我们已经研究过终止方式,Environment.FailFast()但我们认为这不会提供我们需要的异常信息。

我们是否遗漏了一些明显的东西?

4

3 回答 3

1

为什么不直接抛出一个新异常并将 InnerException 属性设置为未处理的?默认的 StackTrace 属性会将两个跟踪连接在一起。

请记住,如果您从从 WinQual 检索到的内存转储中进行调试,那么它将是一个无论如何都会被捕获的本机异常。几乎总是可以返回本机​​堆栈并检索托管异常,如果您有可用的符号,通常很容易找出问题所在。无论如何,托管异常的堆栈跟踪在这种情况下都是多余的。

于 2008-10-28T14:42:13.820 回答
0

是的,但是我们在 Application.ThreadException 全局处理程序中,而不是一个 catch 块,所以我们不能只调用 throw,我们必须抛出 e.Exception。

于 2008-10-28T14:02:35.130 回答
-1

是的,正如 Marc 所说,只需使用 THROW,原始异常将被重新抛出,并保留堆栈跟踪信息。

THROW E 将重新启动整个异常堆栈,而原始堆栈信息会丢失。通常这不是您想要的。

或者,您可以抛出一个新异常并将原始异常添加为内部异常。然后你的新例外可能会添加额外的信息。

于 2008-10-28T13:59:54.590 回答