- Web(JavaScript):通过 Flashduty CLI 上传
sourcemap文件 - Android:通过 Gradle 插件自动上传 ProGuard/R8 mapping 文件和 NDK 符号文件
- iOS:通过 Flashduty CLI 上传 dSYM 符号文件
为什么需要源码映射?
在现代应用开发中,代码通常会被压缩、混淆或编译,以优化加载速度和性能。无论是 Web 端的 JavaScript 压缩、Android 的 ProGuard/R8 混淆,还是 iOS 的编译优化,这些处理都会导致错误堆栈中的代码位置信息无法直接映射到原始源代码,增加了调试难度。映射压缩代码
SourceMap 记录了压缩代码与原始代码之间的映射关系,允许开发者在调试时查看未压缩的源代码精确定位错误
通过
SourceMap 可以在异常追踪中直接定位到原始源代码中的具体位置提升调试效率
开发者无需手动解码压缩文件,节省排查问题的时间
生成 SourceMap
大多数现代构建工具(如 Webpack、Rollup 或 Vite)都支持生成SourceMap。
- Webpack
- Vite
- Rollup
在 构建后,
webpack.config.js 中启用 SourceMap 生成:dist 目录中会生成 bundle.js 和对应的 bundle.js.map 文件。上传 SourceMap
使用 Flashduty CLI 将sourcemap 文件上传至 Flashduty 服务器。
上传 Android 符号文件
Android 应用使用 ProGuard/R8 进行代码混淆后,错误堆栈中的类名和方法名会被替换为无意义的短名称。通过上传 mapping 文件,Flashduty 可以将混淆后的堆栈还原为原始代码。 对于包含 NDK 原生代码的应用,还需要上传 NDK 符号文件以还原 C/C++ 层的堆栈。上传 iOS dSYM 文件
iOS 应用在编译时会生成 dSYM(Debug Symbol)文件,其中包含将内存地址映射回源代码位置所需的调试符号信息。上传 dSYM 文件后,Flashduty 可以将崩溃堆栈中的地址还原为可读的函数名、文件名和行号。获取 dSYM 文件
dSYM 文件可从以下位置获取:
- Xcode 本地构建:在 Xcode 的 Build Products 目录中找到
.dSYM文件 - Xcode Archive:通过 Organizer 窗口导出 dSYMs
- App Store Connect:从 App Store Connect 下载 dSYMs(需要在构建设置中启用符号上传)
符号文件管理
在 Flashduty 平台上,符号文件的管理通过「应用管理」-「源码管理」菜单完成:| 功能 | 说明 |
|---|---|
| 查看已上传的符号文件 | 列出所有已上传的文件(SourceMap、mapping 文件、dSYM),包括路径、服务名、版本号、大小和上传时间 |
| 版本管理 | 通过 service 和 release-version 参数为不同版本的应用分别管理 |
| 权限控制 | 通过 API Key 确保只有授权用户可以上传或管理 |
在异常追踪中查看源码
RUM 集成了sourcemap 功能,支持在异常追踪模块中直接查看原始源代码,精确定位问题。
查看异常详情
在异常追踪模块中,点击具体的错误记录,可以查看:
- 错误消息:如
Something went wrong - 原始堆栈:映射后的源代码文件路径、行号和列号
- 上下文代码:显示错误位置附近的源代码片段
最佳实践
规范化 SourceMap 上传
规范化 SourceMap 上传
在 CI/CD 流水线中集成上传命令,确保每次发布时自动上传
sourcemap。GitHub Actions 示例:版本管理
版本管理
使用
--release-version 参数与应用版本号保持一致,便于追踪特定版本的 sourcemap。清理源码
清理源码
在资源上传 CDN 之前删除
sourcemap 文件,避免将源码信息带入生产环境。测试映射效果
测试映射效果
上传
sourcemap 后,主动抛出测试错误,验证异常追踪模块是否能正确映射到源代码。常见问题
为什么异常堆栈没有映射到源代码?
为什么异常堆栈没有映射到源代码?
- 确认
sourcemap是否成功上传,且minified-path-prefix与实际部署路径一致 - 检查
service和release-version是否与错误发生时的应用版本匹配
如何避免 SourceMap 泄露敏感信息?
如何避免 SourceMap 泄露敏感信息?
- 确保
sourcemap文件仅上传至 Flashduty 服务器,不直接暴露在公网 - 在生产环境中,移除对
sourcemap文件的直接访问(如通过 Nginx 配置)
上传 SourceMap 失败怎么办?
上传 SourceMap 失败怎么办?
- 检查
API Key是否有效 - 确保网络连接正常,CLI 版本是最新的
下一步
异常聚合
了解异常聚合机制
Issue 状态
管理 Issue 状态流转
