Skip to main content
错误上报后可在异常追踪模块查看 Issue。在 Flashduty RUM 中,一个 Issue 是由一组相似错误组成的,这些错误通常与同一个 bug 相关。
Issue 列表
详细的聚合规则请参阅 异常聚合

Issue 信息概览

Issue 信息概览
Issue 浏览器中列出的每个条目包含以下信息:

Issue 状态

Issue 有 4 种状态,流转方式如下:
Issue 状态流转
问题复现相关流转逻辑请参阅 Issue 状态

筛选与排序

浏览器右上角显示时间轴,允许您显示在选定时间段内发生错误的 Issue。您可以:
  • 从下拉菜单中选择预设范围
  • 直接修改时间
  • 输入自然语言进行筛选

错误原因分类

Flashcat 在每次创建 Issue 时会为其添加错误发生可能产生的错误原因分类,帮助提升故障定位的效率。
当鼠标在错误原因分类上 hover 时,系统会结合 AI 能力进一步给出推断的根因和修复建议。

分类原理

系统采用两层分析机制对错误进行分类: 第一层:模式匹配 系统首先通过规则引擎按优先级依次检查错误类型和错误消息,首个匹配的规则决定分类结果: 第二层:AI 推断 当模式匹配结果为「未知错误」时,系统会调用 AI 模型进行深度分析。AI 模型会结合以下信息进行判断:
  • 错误消息:错误的描述文本
  • 堆栈信息:完整的调用堆栈
  • 平台类型:浏览器/JavaScript、Android/Kotlin/Java、iOS/Swift/Objective-C、微信小程序等
AI 会输出错误分类和简要的原因解释(不超过 100 字)。推断结果在 Issue 卡片上以 hover 提示的形式展示,帮助您快速理解错误的根因。

问题复现

问题复现(Regression)指的是之前修复的 bug 再次出现。
问题复现
如果一个错误被标记为已解决,但在后续(version 不同)又产生了相同的错误,则该 Issue 的状态会从结束态重新打开,并标记为「问题复现」。

Issue 详情

Issue 列表支持两种查看模式:侧栏模式和全屏模式。默认以侧栏方式打开详情面板,您也可以点击展开按钮切换到全屏模式,获得更宽敞的查看空间和更完整的数据展示。 点击任何 Issue 可以打开详情面板,查看更多信息。
Issue 详情
面板上部显示 Issue 的基础信息,如状态、错误原因等。您还可了解 Issue 的生命周期:首次和最后出现日期、持续时间,以及时间内的错误发生次数(按照一定时间粒度聚合)。
在标签分布区块可按照各种维度查看该 Issue 下不同标签所占比重,从而快速判断问题影响范围,辅助定位根因。目前支持 view_namebrowser_nameversionenv 等标签。
默认展示当前 Issue 发生期间最近一次上报的错误信息作为错误样例,您也可通过导航条进行切换。对于 Native 崩溃,样例导航列表中的每条样例都会标注符号化状态(「已解析」/「未解析」徽标)。当最新一条样例尚未解析、而更早的样例可以符号化时,详情会自动切换到可符号化的样例,并提示「已自动切换到可符号化的样例(最新一条尚未解析)」;点击「回到最新」可切回最新上报的样例。自动切换最多尝试 5 条更早的样例,若这些样例均无法符号化,详情会切回最新一条样例,不再继续自动切换。
查看错误的上下文信息和堆栈信息。如果已上传对应的 SourceMap、Android mapping 文件、iOS dSYM 文件或 Flutter 符号文件,您可以看到映射还原后的原始源码位置和代码片段。
错误堆栈
在「应用管理」-「源码管理」可查看已上传的源码信息,详见 源码映射
Native 平台(Android/iOS)的错误堆栈展示针对移动端特点进行了专门设计,提供以下能力:Pretty / Raw 模式切换
  • Pretty 模式:结构化展示堆栈信息,自动区分应用帧(app frames)和第三方帧(third-party frames),第三方帧默认折叠,突出显示您自己的代码
  • Raw 模式:展示原始堆栈文本,方便复制和在外部工具中分析
符号化状态如果已上传对应版本的符号文件(Android mapping 或 iOS dSYM),堆栈中的混淆地址会被自动还原为可读的函数名、文件名和行号。未符号化时,系统会提示您上传符号文件,并提供直达「源码管理」和上传工具的链接。符号化结果会被缓存。如果为一条已经出现过的崩溃补传了符号文件,点击提示条或「本条崩溃所需符号」区块中的「重新解析」按钮,即可跳过缓存强制重新执行符号化(重新拉取 dSYM 并完整还原),并刷新当前堆栈,无需等待新的崩溃上报。线程堆栈(Threads)Native 崩溃通常涉及多个线程。线程面板展示崩溃时所有线程的堆栈信息,支持:
  • 查看线程总数和当前展示的线程数
  • 展开/折叠所有线程
  • 每个线程内独立区分应用帧和第三方帧,第三方帧可按需展开查看
  • 崩溃线程的堆栈会被优先展示
Binary Images(iOS)对于 iOS 崩溃,还可以查看崩溃时加载的 Binary Images(二进制镜像)列表,包含镜像名称、地址范围和 UUID 等信息,用于辅助离线符号化分析。本条崩溃所需符号(非系统库)当崩溃事件携带非系统二进制镜像时(iOS、Electron 等通过二进制镜像还原地址的 Native 崩溃,含 Flutter 的 iOS 原生崩溃),堆栈上方会展示「本条崩溃所需符号(非系统库)」区块,列出本条崩溃引用的所有非系统二进制镜像及其符号化状态:
  • 区块标题汇总为「已解析数/总数 已解析」;全部已解析时默认折叠为一行摘要,存在未解析镜像时默认展开
  • 每个镜像一行,展示镜像名称、UUID 以及「已解析」/「未解析」徽标,并提供复制 UUID 的按钮
  • 点击「在符号表中查找」跳转到「源码映射」页面,并按该镜像的 UUID 预筛选符号表
  • 未解析的镜像提供「去上传」链接,直达「源码映射」页面的上传入口
  • 未解析时也可以点击区块中的「重新解析」按钮,强制重新符号化并刷新堆栈
Flutter 支持Flutter 原生崩溃(source_typendkandroidios)携带线程堆栈和 Binary Images,与 Android/iOS 原生崩溃一样使用上述 Native 渲染展示;Dart 异常则按堆栈中的 build_id 匹配已上传的 Flutter 符号文件,进行符号化还原。Electron 支持Electron 错误按类型分流展示:主进程和渲染进程的 JavaScript 错误是 V8 堆栈,与浏览器错误一样按 Web 堆栈展示(上传 sourcemap 后还原原始源码);minidump 原生崩溃则是地址形式的 Native 堆栈(含线程与 binary_images),按上述 Native 堆栈视图展示,上传匹配的 Breakpad 符号后还原函数名、文件名和行号。详见 Electron 错误符号化详细的符号文件上传流程请参阅 源码映射
查看当前错误示例所属的 Session 事件总数,以及该异常发生前后用户的资源访问情况和操作情况。
当前最多展示包含当前 Error 事件在内的 20 条上下文信息,后续您可在 Session 查看器模块查看更多日志信息。
如果该会话已采集了回放数据,您可以直接点击「查看回放」按钮跳转到会话重放页面,从用户视角重现错误发生时的完整操作路径。
异常事件在上报时会携带一系列属性,您可在属性区块查看当前的 Session、视图、用户等各类信息,方便排查问题。Electron 错误的属性面板会在 Other 属性组额外展示一个虚拟 process 属性(主进程 / 渲染进程),标识错误来自哪个运行时;非 Electron 错误不展示该属性。

异常告警

在问题发生时立即发现它,让您有机会在问题变得严重之前主动识别和修复它。
异常告警配置
1

进入应用管理

选中应用卡片后进行编辑
2

开启告警

打开「告警」开关
3

选择协作空间

选择通知的协作空间
具体告警配置说明请参阅 Issue 告警

最佳实践

配置源码映射

便于在生产环境定位问题

添加用户信息

配置用户相关信息,提供更好的错误上下文

设置告警策略

为错误配置合理的协作空间和分派策略

定期错误分析

定期检查错误报告,发现潜在问题

团队协作

利用团队所有权功能确保问题能够快速分配给相关团队

监控回归

密切关注已解决问题的潜在回归

下一步

源码映射

配置源码映射

异常聚合

了解聚合机制

Issue 状态

管理 Issue 状态