|
1
5
托管异常是使用常规的Windows结构化异常处理机制实现的。异常代码为0xe0434f4d。Windows寻找一个愿意处理异常的异常处理程序。如果代码在堆栈上没有活动的try块,或者没有catch块愿意捕获托管异常,那么托管代码的最后一步就是AppDomain.UnhandledException事件。 如果在异常处理切换到非托管处理之后也没有实现,那么使用SetUnhandledExceptionFilter的异常筛选器集将获得快照。否则,Windows总会提供一个默认的处理程序。通常调用WER,Windows错误报告程序。它为用户提供了一个将异常详细信息发送到Microsoft的对话框。别指望会有什么结果。
确保在最后关头捕获异常,为AppDomain.UnhandledException编写事件处理程序。记录e.ExcdeptionObject.ToString()的值,并使用Environment.Exit()终止程序。还要注意Windows窗体代码中的Application.ThreadException事件和WPF代码中的Dispatcher.UnhandledException事件。它们是在UI线程上处理事件时引发的异常的后止点。 |
|
|
2
2
对于本机应用程序,可以使用以下功能:
AddVectoredExceptionHandler 尽管我不建议这样做,因为它也会截获捕获的异常。
在我的应用程序中,我使用SetUnhandledExceptionFilter创建应用程序转储(使用函数 MiniDumpWriteDump 小心不要在那个功能上做太多。由于您的应用程序已经崩溃,因此不能保证任何进一步的逻辑仍能工作(例如,访问您自己的数据结构可能会导致进一步的崩溃)。 Debugging Microsoft NET 2.0 Applications “约翰·罗宾斯。我从这本书中学到了很多,包括这个技巧。 |