Android中的Crashlytics空stacktrace

时间:2018-06-21 15:36:49

标签: crashlytics google-fabric crashlytics-android

我在crashlytics ndk stacktrace切片中遇到问题。 stacktrace中的所有行或特定行都“丢失”。

我模拟了设备(nullptr SIGSEGV)崩溃,并使用正确的函数名称在logcat中获得了人的堆栈跟踪。 在下一个会话中,crashlytics正确地发送了报告,但是在Fabric的仪表板中,我看到此崩溃具有“丢失”行,尽管事实在logcat中是正确的。

当我上传符号时,正确进行崩溃分析的机会会增加。但仅适用于最后一次构建,而不适用于所有崩溃。 这意味着crashlytics对于所有应用程序版本仅存储单个符号副本,因此旧版本将发送带有“缺失”行的stacktrace。

所有这些之后,我尝试研究Android中捕获和解析崩溃的机制,并使用libunwind创建我的sigaction捕获器。 它为我提供了正确的stacktrace,我将其放入crashlytics有效负载(context->log())。 接下来,我将信号返回给crashlytics sigaction处理程序。 最后,我在Fabric的报表中有“缺少”行,而在我的有效负载中有有效的堆栈跟踪。 有时,这种方法会在android 8.0以下的操作系统中导致崩溃,我认为这是因为我使用了非安全信号功能,但在android 8+上仍然可以使用。

我还创建了链接器映射文件(-Xlinker -Map=output.map),但是我无法将其与架构报告链接,而不是我自己创建的stacktrace。

所以,问题是:为什么在这种情况下crashlytics stacktrace中的行“丢失”了,而logcat和简单的sigaction catcher提供了正确的stacktrace?

版本:

crashlytics 2.9.3

crashlytics-ndk 2.0.4

代码:

Fabric.with(context, new Crashlytics(), new CrashlyticsNdk());

0 个答案:

没有答案