Crashlytics 问题排查和常见问题解答


本页面提供了问题排查帮助,并解答了有关使用 Crashlytics 的常见问题。如果您找不到想要的内容或需要其他帮助,请与 Firebase 支持团队联系。

常规问题排查/常见问题解答

您可能会注意到,Firebase 控制台的“问题”表格中列出的问题有两种不同的格式。您还有可能注意到,某些问题中具有一个称为“变体”的功能。原因如下:

2023 年初,我们发布了经过改进的事件分组分析引擎,还更新了设计,并推出了一些针对新问题的高级功能(例如变体)。如需了解详情,请参阅我们近期发布的博文;如需了解亮点,您可以阅读下文。

Crashlytics 会分析应用的所有事件(如崩溃、非严重错误和 ANR),并创建一种称为问题的事件组,以此将具有共同故障点的所有事件纳入一个问题。

为了将事件划分到这些问题中,经过改进的分析引擎现在会考虑事件的许多方面,包括堆栈轨迹中的帧、异常消息、错误代码以及其他平台或错误类型特征。

但在这种事件组中,导致各事件失败的堆栈轨迹可能有所不同。不同的堆栈轨迹可能代表着不同的根本原因。 为了体现一个问题内部可能存在的此类差异,我们现在会在问题内创建变体,变体是一个问题中的事件子组,该子组内的事件具有共同的故障点以及相似的堆栈轨迹。借助变体,您可以调试一个问题内最普遍的堆栈轨迹,并确定是否有不同的根本原因会导致这一故障。

改进后的体验如下:

  • 改进了问题行中显示的元数据
    现在,您可以更轻松地了解应用中的问题并进行分类。

  • 减少重复问题
    更改行号不会导致新问题。

  • 更轻松地调试存在多种不同根本原因的复杂问题
    使用变体调试一个问题中最普遍的堆栈轨迹。

  • 更有意义的提醒和信号
    新问题表示真的出现了新的 bug。

  • 更强大的搜索功能
    每个问题都包含更易于搜索的元数据,例如异常类型和软件包名称。

具体改进措施如下:

  • 从您的应用获取新事件时,我们会检查这些事件是否与现有问题匹配。

  • 如果没有匹配项,我们会自动为事件应用更智能的事件分组算法,并使用改进后的元数据设计创建新的问题。

这是我们对事件分组进行的第一次重大更新。如果您有任何反馈或遇到任何问题,请通过提交报告告诉我们。

如果您没有看到路径日志,我们建议您检查应用的 Google Analytics 配置。请确保您符合以下要求:

如果您没有看到疾速崩溃提醒,请确保您使用的是

如果您没有看到“未遇到崩溃问题”指标(例如“未遇到崩溃问题”的用户数和“未遇到崩溃问题”的会话数)或看到不可靠的指标,请检查以下各项:

  • 请确保您使用的是

  • 请确保您的数据收集设置不会影响“未遇到崩溃问题”指标的质量:

    • 如果您通过停用自动崩溃报告来启用自选式报告,则崩溃信息只能从明确选择启用数据收集功能的用户那里发送到 Crashlytics。因此,“未遇到崩溃问题”指标的准确性会受到影响,因为 Crashlytics 仅包含这些已选择启用该功能的用户(而非所有用户)的崩溃信息。这意味着,您的“未遇到崩溃问题”指标可能不太可靠,也不能反映您的应用的整体稳定性。

    • 如果您已停用自动数据收集功能,则可以使用 sendUnsentReports 将设备端缓存的报告发送到 Crashlytics。使用此方法会将崩溃数据发送到 Crashlytics,但不会发送会话数据,这会导致控制台图表显示“未遇到崩溃问题”指标的低值或零值。

请参阅了解“未遇到崩溃问题”指标

借助备注功能,项目成员可以就相关疑问或状态更新等特定问题进行备注。

项目成员发布备注时,系统会标注其 Google 账号的电子邮件地址。此电子邮件地址将与备注一起向有权访问备注的所有项目成员显示。

下文介绍了查看、撰写和删除备注所需的权限

集成

如果您的项目同时使用 CrashlyticsGoogle Mobile Ads SDK,这可能是由于在注册异常处理程序时,崩溃报告工具进行了干扰。如需解决此问题,请调用 disableSDKCrashReporting,在 Mobile Ads SDK 中关闭崩溃报告。

无论您的 Firebase 项目位于何处,将 Crashlytics 关联到 BigQuery 后,您创建的新数据集都会自动采用美国位置。

平台支持

回归问题

如果您之前修复并关闭了某个问题,但 Crashlytics 收到了一个该问题再次发生的新报告,则表明该问题已回归。Crashlytics 会自动重新打开这些回归问题,以便您可以根据自己的应用需求采取相应措施。

以下示例场景说明了 Crashlytics 如何将问题归类为回归问题:

  1. Crashlytics 首次收到有关崩溃“A”的崩溃报告。Crashlytics 会为该崩溃打开相应的问题(问题“A”)。
  2. 您快速修复此 bug,关闭问题“A”,然后发布应用的新版本。
  3. 在您关闭问题后,Crashlytics 收到关于问题“A”的另一份报告。
    • 如果报告来自 Crashlytics 在您关闭问题时知道的应用版本(这意味着该版本已针对任何崩溃发送了崩溃报告),则 Crashlytics 不会将问题视为回归。此问题将保持关闭状态。
    • 如果报告来自 Crashlytics 在您关闭问题时知道的应用版本(这意味着该版本从未针对任何崩溃发送过崩溃报告),则 Crashlytics 会将该问题视为回归问题,并将其重新打开。

当某个问题回归时,我们会发送回归检测提醒,并向该问题添加回归信号,让您知道 Crashlytics 已经重新打开了问题。如果您不希望由于回归算法而要重新打开问题,请“忽略”问题,而不是将其关闭。

如果报告来自在您关闭问题时从未发送过任何崩溃报告的旧应用版本,则 Crashlytics 会认为问题已回归,并会重新打开问题。

在以下情况下,可能会出现这种情形:您已修复了一个 bug,并发布了应用的新版本,但仍有一些用户使用的是旧版本,而且未进行 bug 修复。如果偶然情况下,当您关闭问题时,其中一个旧版本根本没有发送过任何崩溃报告,并且这些用户开始遇到 bug,那么这些崩溃报告将触发回归问题。

如果您不希望由于回归算法而要重新打开问题,请“忽略”问题,而不是将其关闭。