嘿:)
有什么办法可以全局捕获已处理的异常吗?我知道我们可以使用“ AppDomain.CurrentDomain.UnhandledException”和“ Application.ThreadException”捕获未处理的异常,但是我想对已经捕获的异常进行一些处理(例如写入日志等)
谢谢
参考方案
通常,您可能希望在代码的最低级别捕获异常。相对于异常发生的地方,他们越近,您越有机会解决导致他们的问题的机会越大。
如果您无法在此级别上采取任何纠正措施来解决导致异常的问题,那么您根本不应该对其进行处理。只需让异常冒出气泡,然后根据需要全局处理即可。
话虽如此,如果您已经在较低级别上处理了异常,那么您将能够在较高级别上捕获该异常的唯一方法是,如果您从较低级别的Catch
块中rethrow it因此,例如:
try
{
//your code
}
catch (SomeException e)
{
//take any relevant handling measures
//rethrow the exception
throw;
}
当然,从技术上讲,这意味着较低级别的Try / Catch块无法处理该异常,但这是在更高级别捕获任何内容的唯一方法。
有关重新抛出异常的更多信息,请参见:
Why Re-throw Exceptions?
http://weblogs.asp.net/fmarguerie/archive/2008/01/02/rethrowing-exceptions-and-preserving-the-full-call-stack-trace.aspx
http://msdn.microsoft.com/en-us/library/xhcbs8fz.aspx
我经常发现将php错误转换为将回调注册到set_error_handler和register_shutdown_function的异常非常有用,因此我决定尝试一些更可靠的解决方案,即Symfony Debug组件。但是,它们在introduction page中警告: 您永远不要在生产环境中启用调试工具,因为它们可能会向用户泄露敏感信息。启用调试组件基本上意…
在屏幕上打印错误,但继续执行代码 - python我有一些代码可以通过一系列URL进行迭代。如果由于其中一个URL不包含有效的JSON正文而导致我的代码中出现错误,我希望将生成的错误打印到屏幕上,然后将代码移至下一个迭代。我的代码的简单版本是:for a in myurls: try: #mycode except Exception as exc: print traceback.format_exc()…
catch与catch和throwth异常之间的区别? - java我们可以通过try-catch或throw引发异常方案1:public void testMethod() throws MyException { throw new MyException(); } 方案2:public void testMethod() throws MyException { try { throw new MyException(…
Java-NoSuchMethodError没有被异常捕获 - java我的印象是,Exception非常适合捕获所有可能的异常,因为每个异常都具有Exception作为基类。然后,在开发Android应用程序时,我使用了以下方法,该方法在某些自定义ROM中已被删除。boolean result = false; try{ result = Settings.canDrawOverlays(context); } catch(E…
使用JQuery处理PHP异常 - php我正在使用JQuery调用PHP函数,该函数将在成功时返回JSON字符串或引发一些异常。当前,我在响应上调用jQuery.parseJSON(),如果失败,则假定响应包含异常字符串。$ .ajax({ 输入:“ POST”, 网址:“ something.php”, 成功:功能(响应){ 尝试{ var json = jQuery.parseJSON(res…