我想知道最好的方法是"如果所有其他方法都失败了".
我的意思是,你在应用程序中处理尽可能多的异常,但仍然存在bug,所以我需要有一些东西可以捕获所有未处理的异常,这样我就可以收集信息并将它们存储在数据库中或提交它们到网络服务.
AppDomain.CurrentDomain.UnhandledException事件是否捕获了所有内容?即使应用程序是多线程的?
旁注:Windows Vista公开了本机API函数,允许任何应用程序在崩溃后自行恢复...现在无法想到名称...但我宁愿不使用它,因为我们的许多用户仍在使用Windows XP.
我的问题与这个问题非常相似"找出方法可能会在C#中引发的异常".但是,我真的想知道是否有人知道一种方法来确定给定方法可能引发的所有异常的堆栈.我希望有一个工具或实用程序,我可以在编译时或通过像FxCop,StyleCop或NCover这样的反射来分析代码.我在运行时不需要这些信息我只是想确保我们捕获异常并在代码中正确记录它们.
我们目前正在捕获我们所知道的异常并记录所有外卡.这确实很有效; 但是,我只是希望有人使用或知道可以发现这些信息的工具.
我在WPF应用程序中遇到了一个非常棘手的缺陷,需要跟踪.错误消息是:
在布局/渲染过程中反复使TimeManager失效会导致无限循环.
堆栈跟踪(它的价值)是:
在System.Windows.Media.MediaContext.RenderMessageHandlerCore(对象resizedCompositionTarget)在System.Windows.Media.MediaContext.RenderMessageHandler(对象resizedCompositionTarget)在System.Windows.Threading.ExceptionWrapper.InternalRealCall(代表回调,对象指定参数时,的Int32 numArgs)在MS .Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source,Delegate方法,Object args,Int32 numArgs,Delegate catchHandler)
这是一个间歇性的缺陷,我唯一可以捕获它的地方是在app配置文件中,我正在捕获Application_DispatcherUnhandledException消息.我在我的应用程序中的所有内容都包含在try catch块中,然而这些内容最终会被捕获到未处理的异常中.
有没有人对此有任何见解?我在互联网上搜索了一些东西并且没有发现任何东西,并且想到这里可能有人可能有一些见解或想法如何追踪这一点.目前,我正在吞下这个异常并让应用程序继续运行,因为它似乎对它没有任何影响(除了崩溃).
我希望优雅地处理所有内部错误,而无需程序终止.
作为讨论在这里,使用_set_se_translator 捕捉除以零错误.
但是它没有捕获,例如,C运行时库错误-1073740777(0xc0000417),这可能是由printf的格式字符串引起的,它们的百分号不应该出现.(这只是一个例子;当然我们应该检查这样的字符串).要处理这些,需要_set_invalid_parameter_handler.
此外,这个将捕获未捕获的C++异常:SetUnhandledExceptionFilter.因此,它可以与__set__ ...函数一起使用.(关于在MSVC 2008中使用它的文章.)
我想捕获任何和所有错误,以便我可以处理它们(通过记录,抛出现代C++标准异常并返回特定于应用程序的错误代码).是否有一个捕获一切的处理程序?
另请参阅StackOverflow上的内容.
我正在使用Visual Studio 2008.