我们正在尝试更新我们的应用程序,以便将其提交以获得 Vista 认证。部分要求是只处理已知的异常,并让 Windows 错误报告处理所有未处理的异常。
我们的应用程序中有一个全局异常处理程序(订阅了 Application.ThreadException
事件),我们在其中对已知异常执行某些处理,但如果异常未知,我们希望抛出应用程序终止并处理 WER。
如果我们重新抛出然后调用堆栈被重新创建,我们看不到执行此操作和维护调用堆栈的方法。
我们已经研究过通过 Environment.FailFast()
终止,但我们认为这不会提供我们需要的异常信息。
我们是否遗漏了一些明显的东西?
最佳答案
为什么不抛出一个新的异常并将 InnerException 属性设置为未处理的异常?默认的 StackTrace 属性会将两个跟踪连接在一起。
请记住,如果您正在调试从 WinQual 检索到的内存转储,那么它将是一个无论如何都会被捕获的 native 异常。几乎总是可以返回 native 堆栈并检索托管异常,如果您有可用的符号,通常很容易找出问题所在。在这种情况下,托管异常的堆栈跟踪无论如何都是多余的。
https://stackoverflow.com/questions/243244/