KKMonitor

错误监控

监控移动应用中的崩溃、ANR、未处理错误和已处理错误。查看故障内容、发生频率,以及故障发生时用户正在做什么。

Measure 会记录应用中的崩溃、ANR 和其他错误。每个错误都会附带 Session Timeline,显示用户在遇到错误之前的操作路径。类似错误会被分组为一个 issue,便于了解发生频率并决定优先修复项。

错误严重性

每个错误都按严重程度进行分类。

  • 致命错误是导致应用崩溃的错误。
  • 未处理错误是逃逸出代码但不一定导致应用崩溃的错误。
  • 已处理错误是您手动捕获并报告的错误。

崩溃报告

Measure 自动报告崩溃。捕获什么以及如何捕获取决于您的平台。

Android

当未捕获异常终止应用时,它会被记录为致命错误,并带有完整 stack trace 和导致该异常的会话。

如果使用 R8 混淆代码,请在 Dashboard 的 Mapping 区域上传匹配的 mapping.txt,让 stack trace 可读。Measure Android Gradle 插件只上报构建信息以及 APK/AAB 的大小元数据,不上传 Mapping 或 APK/AAB 文件本体。

iOS

崩溃报告会在崩溃发生时保存,并在用户下次重新打开应用时上传。崩溃由 KSCrash 捕获。

默认情况下,stack trace 只包含内存地址。请在发布流水线中或 Xcode Build Phase 中使用这些脚本上传 dSYM 文件。

ANR 报告

一个ANR当应用程序的主线程阻塞时间过长时,例如当它无法在 5 秒内响应输入时,就会发生(应用程序未响应)。自动报告 ANR。

Android 11 日及以上,应用程序退出信息还会在下次启动时收集以记录应用程序退出的原因。 ANR 退出包括操作系统获取的线程转储。

跟踪已处理的错误

您可以手动报告发现并恢复的错误。看跟踪错误以获得完整的签名。

import sh.measure.android.Measure

try {
    methodThatThrows()
} catch (e: Exception) {
    Measure.trackHandledException(e)
}
import Measure

// Track a Swift Error or an NSError with trackError
do {
    try someThrowingFunction()
} catch {
    Measure.trackError(error)
}

添加属性

将属性附加到已处理的错误以记录有关该错误的其他上下文。您可以在仪表板上按这些属性进行过滤和分组。看属性限制允许的键和值。

import sh.measure.android.attributes.AttributesBuilder

val attributes = AttributesBuilder().put("screen", "Login").build()
Measure.trackHandledException(e, attributes)
Measure.trackError(error, attributes: ["screen": .string("Login")])

Session Timeline

Measure 会为每个包含致命未处理错误的会话收集 Session Timeline。它按时间顺序记录错误发生前后的上下文:打开的屏幕、点击、网络请求、日志、应用生命周期事件、网络变化等。用它可以准确回溯用户在崩溃前做了什么。

默认情况下,时间线涵盖错误发生前的 5 分钟。较长的窗口提供更多上下文,但收集更多数据。从仪表板更改它Adaptive Capture.

截图

每次崩溃和 ANR 都可以包含问题发生时的屏幕截图。在截图上传之前,设备上的敏感内容会被遮罩,屏幕截图遮罩级别控制隐藏范围。查看截图遮罩,了解每个平台的工作方式以及遮罩特定视图的 API。

iOS 不支持崩溃屏幕截图。

警报

崩溃或 ANR 激增会通过电子邮件和 Slack 触发警报。已处理的错误永远不会触发警报。看警报了解如何检测峰值、如何调整阈值以及如何设置交付。

配置选项

崩溃和 ANR 通过远程配置Adaptive Capture,因此您可以更改这些内容而无需发布新版本:

  • 截图:Measure是否在每次崩溃时捕获屏幕截图以及ANR。默认开启。
  • 会话时间线持续时间:时间线在错误发生之前到达多远。较长的窗口提供更多上下文,但收集更多数据。默认 5 分钟。
  • 屏幕截图遮罩级别:每张屏幕截图中要遮罩多少内容,以防止敏感内容泄露。默认会遮罩所有文本和媒体。

错误对于每个设置。