android中的Crashlytics空堆栈跟踪

android中的Crashlytics空堆栈跟踪,crashlytics,google-fabric,crashlytics-android,Crashlytics,Google Fabric,Crashlytics Android,我在crashlytics ndk stacktrace包装中遇到了问题。stacktrace中的所有行或特定行“丢失” 我模拟了设备上的崩溃(nullptr-SIGSEGV),并在logcat中获得了具有正确函数名的人类frienly stacktrace。 在下一个会话中,crashlytics正确地发送了报告,但在Fabric的仪表板中,我看到此崩溃有“丢失”行,尽管它在logcat中是正确的 当我上传符号时,正确的崩溃解析的机会增加了。但仅适用于最后一次构建,而不是所有崩溃。 这意味着c

我在crashlytics ndk stacktrace包装中遇到了问题。stacktrace中的所有行或特定行“丢失”

我模拟了设备上的崩溃(nullptr-SIGSEGV),并在logcat中获得了具有正确函数名的人类frienly stacktrace。 在下一个会话中,crashlytics正确地发送了报告,但在Fabric的仪表板中,我看到此崩溃有“丢失”行,尽管它在logcat中是正确的

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

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

我还创建了链接器映射文件
(-Xlinker-map=output.map)
,但我无法将其与自制stacktrace的结构报告istead链接

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

版本:

crashlytics 2.9.3

crashlytics-ndk 2.0.4
Fabric.with(context, new Crashlytics(), new CrashlyticsNdk());
代码:

crashlytics 2.9.3

crashlytics-ndk 2.0.4
Fabric.with(context, new Crashlytics(), new CrashlyticsNdk());

嗨,来自Crashlytics的Paul。由于我们的NDK报告在其设置中有许多变量,要进一步调试,请通过支持(at)fabric(dot)io与我们联系。感谢回复,已发送电子邮件。