向未捕获的异常添加额外信息

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 发送额外的数据。还有其他选择吗? 每个线程处理程序比每个类/代码段等更可取 看来你的问题和原来的不一样。请为此创建一个新问题。

以上是关于向未捕获的异常添加额外信息的主要内容,如果未能解决你的问题,请参考以下文章

Asp.net 身份额外的用户信息,如电子邮件等

Android 12 ACTION_SENDTO Intent 额外异常的原因是啥?

ActionScript 3 将视频帧捕获到BitmapData(额外 - 将位图添加到PV3D材质)

将视频帧捕获到位图数据(额外-将位图添加到PV3D材质)

扩展 log4net - 向每个日志添加额外数据

向 createGroup( ) 添加额外信息以在 discoveryPeers( ) 中使用