java - 如何在原始堆栈跟踪的位置集中记录异常?
问题描述
Android 应用程序中的所有异常都通过一种全局方法记录在 Firebase Crashlytics 中。
public class L {
public static void e(String message, Exception e) {
Crashlytics.logException(e);
}
}
问题在于,在 Crashlytics 中,异常是按记录的位置分组的。因此,所有记录的异常对 Crashlytics 来说都是同一个异常。
换句话说,堆栈跟踪中增加了一行,它成为 Crashlytics 用来对异常进行分组的新顶层。这使得浏览和分析异常变得困难,因为它们都被扔进了一个锅里。
是否可以在不添加额外顶层的情况下记录原始异常?也许有回调,还是有更优雅的方式?
解决方案
通过修改异常的堆栈跟踪实际上是可能的。
Crashlytics 记录异常的堆栈跟踪。堆栈跟踪设置RuntimeException
为创建的位置。通过删除堆栈跟踪的顶部条目,Crashlytics 会记录异常,就好像它是在新的顶部堆栈条目中抛出的一样。
public static e(@NonNull String message) {
RuntimeException e = new RuntimeException(message);
StackTraceElement[] s = Arrays.copyOfRange(e.getStackTrace(), 1, s.length);
e.setStackTrace(s);
Crashlytics.logException(e);
}
推荐阅读
- php - 首先匹配查询mysql laravel-5中的相关数据
- apache-spark - Spark 中的 Hive 分区、Spark 分区和连接 - 它们之间的关系
- html - (角度)图像不会显示
- heroku - 如何使用 heroku 工作进程作为 API 服务器?
- reactjs - HOC 中的内部函数如何获取 props
- scheme - 通过方案中的功能递归问题
- git - 我对源树解决冲突有点困惑:使用我的解决和使用他们的解决
- git - 在现有的本地 git 存储库中创建了一个新文件夹。Finder 显示文件夹,终端 ls 不显示
- c# - 如何以编程方式获取 Chrome 开发人员工具 - > 模拟设备中列出的所有可用设备?
- java - 线程“主”java.lang.NoClassDefFoundError 中的异常:org/apache/commons/logging/LogFactory - 命令行