【问题标题】: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");
}

以我的自定义异常消息为例。

但是还有其他方法可以实现吗?

【问题讨论】:

    标签: java android error-reporting


    【解决方案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 线程抛出异常。
    • 我不想将所有内容都包含在try{}catch{} 中(因为还有后台任务也需要try-catch)。我写过关于线程异常处理程序(或 defaultHandler)的文章,它可以作为单个捕获点工作。我的问题是在处理程序中抛出异常会帮助我向 Google.Play 发送额外的数据。还有其他选择吗?
    • 每个线程处理程序比每个类/代码段等更可取
    • 看来你的问题和原来的不一样。请为此创建一个新问题。
    猜你喜欢
    • 2010-09-08
    • 2014-01-19
    • 1970-01-01
    • 2012-01-04
    • 2011-08-29
    • 2017-05-26
    • 2012-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多