向未捕获的异常添加额外信息
Posted
技术标签:
【中文标题】向未捕获的异常添加额外信息【英文标题】:Add extra information to uncaught exception 【发布时间】:2012-12-12 19:09:19 【问题描述】:在 Google.Play 中有一个关于未捕获异常的统计信息。我想知道有什么办法可以在异常中添加一些额外的信息,所以它会显示在 Google.Play 中(导致无法使用第三方错误报告服务)。
我知道Thread.setUncaughtExceptionHandler
,我想我可以写类似的东西
public void uncaughtException (Thread thread, Throwable ex)
throw new CustomException(ex, "extraData");
以我的自定义异常消息为例。
但是还有其他方法可以实现吗?
【问题讨论】:
【参考方案1】:你的意思是?
public class CustomException extends Exception
public CustomException(Throwable cause, String message)
super(message, cause);
【讨论】:
是的,消息似乎是传递额外信息的唯一方法。主要问题是如何捕获这些异常【参考方案2】:您可以使用ACRA。除了提供比 Google Play 崩溃报告更多的信息外,它还允许您轻松地将 custom data 添加到报告中。
【讨论】:
我需要在 Google 中查看此信息。不要在其他服务中播放,甚至是 Google Docs【参考方案3】:我想说你在这里没有抓住重点。为了向未捕获的异常添加信息,您需要捕获异常。一旦你知道在哪里以及如何捕获异常,正确的做法是正确处理异常,以免对用户体验造成干扰。
发生未捕获的异常是因为您忽略了错误条件并且没有处理错误条件。处理错误,不会有未捕获的异常需要担心。
了解可能的错误条件是编写运行良好的程序的基础。如果您继续编写忽略错误和状态代码的代码,您将造成混乱,经常会因未捕获的异常而崩溃。处理异常和错误需要花费大量时间和代码,但这只是编程的一部分,您不能忽视。
【讨论】:
要点是有一个异常处理程序,它将为以后的调查添加额外的信息。这是必需的,因为我在 Google.Play 中看到错误,这些错误未在测试环境中重现,但在生产中存在(这可能是生产 Web 服务的问题,而不是应用程序本身的问题)。我需要找出这些异常发生的原因,这就是我需要一些额外信息的原因 把你所做的一切都放在一个 try ... catch (Throwable th) ... 块中。没有一个地方,因为您的应用程序有多个入口点(onCreate、onResume、onPause、onBackPressed 等)。每次您自己的代码处于控制之下时,您都必须这样做。但即使这样也无法解决将无效数据传递给 API 的情况,例如 UI 线程抛出异常。 我不想将所有内容都包含在trycatch
中(因为还有后台任务也需要try-catch)。我写过关于线程异常处理程序(或 defaultHandler)的文章,它可以作为单个捕获点工作。我的问题是在处理程序中抛出异常会帮助我向 Google.Play 发送额外的数据。还有其他选择吗?
每个线程处理程序比每个类/代码段等更可取
看来你的问题和原来的不一样。请为此创建一个新问题。以上是关于向未捕获的异常添加额外信息的主要内容,如果未能解决你的问题,请参考以下文章
Android 12 ACTION_SENDTO Intent 额外异常的原因是啥?