首页 > 解决方案 > 如何在原始堆栈跟踪的位置集中记录异常?

问题描述

Android 应用程序中的所有异常都通过一种全局方法记录在 Firebase Crashlytics 中。

public class L {
    public static void e(String message, Exception e) {
        Crashlytics.logException(e);
    }
}

问题在于,在 Crashlytics 中,异常是按记录的位置分组的。因此,所有记录的异常对 Crashlytics 来说都是同一个异常。

在此处输入图像描述

换句话说,堆栈跟踪中增加了一行,它成为 Crashlytics 用来对异常进行分组的新顶层。这使得浏览和分析异常变得困难,因为它们都被扔进了一个锅里。

是否可以在不添加额外顶层的情况下记录原始异常?也许有回调,还是有更优雅的方式?

标签: javaandroidfirebaseexceptioncrashlytics

解决方案


通过修改异常的堆栈跟踪实际上是可能的。

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);
}

推荐阅读