我想捕获所有引发(处理或未处理)异常以记录它们。对于未处理的我使用ThreadExceptionEventHandler和UnhandledExceptionEventHandler但我想捕获和尝试catch块中有或没有(例外e)的异常。可以继承异常类来创建一般事件吗?捕获所有(已处理或未处理)异常
回答
从Exception继承以提供您自己的Exception类对于您在代码中生成的异常可以很好地工作,并且可以使用内部异常构造函数在链中携带内置异常。
如果您想要尝试这样做,您需要替换所有的异常处理代码,并且可能还需要添加更多块。我认为它不会比Peter McGrattan的方法好很多,但它可能允许您在保留&检查原始异常和重新投掷时使用不同的选项,例如记录下它是否已经被记录下来链。
只要是明确的,可以使用:
catch (Exception e)
{
log(e);
throw;
}
将重新抛出原始异常。
不,那不可能。
这是有可能的唯一方法是使用调试的API(the managed version is named mdbg)
听起来像是你有未处理的异常所涵盖的可能,处理的异常你就不能最终...
catch (Exception e) {}
并与实例调用相同的日志记录功能。
如果没有,你真的必须有一些情况下,您有一个追赶,但没有抓住,你可以用一个实例...
catch { throw; }
重新抛出该异常最终被捉住并记录作为一个未处理的例外。
从Windows XP开始,即使在知道处理或未处理之前,您也可以得到关于每个引发异常的通知。 这可以通过所谓的“向量化”异常处理来实现,这实际上是对标准结构化异常处理的一点补充。
致电AddVectoredExceptionHandler
添加您自己的处理程序。你会马上叫异常引发之后,无论是通过明确throw
/__CxxThrowException
/RaiseException
或隐式处理器(访问冲突或等)
您可以登录异常处理函数中(如农产品堆转储),并返回EXCEPTION_CONTINUE_SEARCH
。
C++允许catch(...)
捕获所有异常,但并不真正允许深入分析它们。 (请参阅using catch(...) (ellipsis) for post-mortem analysis) 我不确定它是否能用C#工作。
没有办法捕获已捕获的异常,但可能与AddVectoredExceptionHandler一起工作。
说了这么多,你可以使用一个接球重新抛出的方法:
catch(Exception e) {
Logger.Log(e);
throw;
}
或
catch(Exception e) {
bool rethrow = LoggerStrategy.Log(e);
if(rethrow) { throw; }
}
更妙的是,使用记录应用程序块。
- 1. 捕获所有未处理的异常
- 2. 未处理的异常未被处理程序捕获
- 3. 捕获未处理的线程异常
- 4. 如何“捕获”未处理的异常
- 5. Android未捕获的处理程序/未捕获的异常
- 6. 处理异常时抛出的额外的未捕获异常
- 7. 处理未处理的异常问题
- 8. DRf,处理未处理的异常
- 9. 如何处理未处理的异常?
- 10. 处理未处理的异常
- 11. AWS CloudWatch记录已处理和未处理异常的指标
- 12. 错误捕获/异常处理
- 13. happstack-lite处理程序捕获异常
- 14. 捕获SOAP错误并处理异常
- 15. 尝试和捕获异常处理
- 16. WPF - 处理未处理的异常时要捕获哪些信息?
- 17. 如何处理未捕获的异常,然后将处理委托给系统?
- 18. 承诺:未处理的异常未捕获
- 19. PGAgent:捕获未处理的未知异常;终止
- 20. Javascript是否触发未处理/未捕获异常的事件?
- 21. WPF未处理的异常
- 22. Django未处理异常
- 23. 未处理的异常
- 24. 格式异常未处理
- 25. 未处理的异常
- 26. 未处理的异常
- 27. 未处理的异常+ VS2010
- 28. 空异常未处理?
- 29. 未处理的异常
- 30. stackoverflow异常未处理
这是一个非常大的应用程序,我需要把log.write()放在所有try catch块中,这就是我想要避免的。谢谢 – andySF 2010-05-06 10:49:43