as

Settings
Sign out
Notifications
Alexa
亚马逊应用商店
Ring
AWS
文档
Support
Contact Us
My Cases
新手入门
设计和开发
应用发布
参考
支持
跳转到主要内容
“汇总崩溃报告”(ACR) 摘要将所有崩溃调试数据整理到一个markdown文件中。Vega Studio会在每次符号化结束时自动生成摘要。

先决条件

了解ACR文件和摘要报告

ACR文件和摘要报告适用于不同的用途,也不是同一个文件。

如何使用摘要

符号化完成后,Vega Studio会自动在新选项卡中打开摘要。 要诊断崩溃,请按照以下步骤操作:
  1. 从元数据开始 - 检查崩溃原因和语言,以了解出现的崩溃类型。
  2. 检查符号化堆栈跟踪 - 在堆栈跟踪中查找您的应用代码中的函数名称。
  3. 查看系统信息 - 检查崩溃时的使用情况。
  4. 与源代码交叉引用 - 使用堆栈跟踪中的文件路径和行号来找出项目中有问题的代码。
  5. 确定后续步骤:
    • 如果崩溃出现在您的应用代码中,请修复问题并进行测试
    • 如果崩溃出现在操作系统代码中,或者您只能看到系统帧,请联系亚马逊支持人员并提供ACR文件
    • 如果您不确定,请参阅崩溃来源分析以获取指导说明
    • 如果符号化失败或摘要不完整,请参阅修复崩溃分析问题

摘要结构

以下各部分描述了摘要的组成部分,以及每个组成部分包含的信息。

文件头

包含ACR文件的文件路径和相关临时工作目录的路径。可以使用这些路径来查找原始崩溃文件和中间符号化文件。 示例:

Metadata(元数据)

该部分包含ACR文件中的相关元数据:
  • PROCESS - 崩溃的进程。示例:com.example.myapp或/usr/bin/eventmgrd
  • CRASH_REASON - 崩溃的原因。有关崩溃原因及其描述的完整列表,请参阅崩溃原因参考。
  • CRASH_LANG - 崩溃代码的编程语言。可能的值:Native、JavaScript或Unknown。如果出现ANR(应用无响应)问题,当崩溃线程ID与JavaScript线程ID匹配时,ACR文件会报告“Unknown”(未知)。阻塞可能发生在原生代码中,也可能发生在JavaScript代码中,因此该工具无法自动确定语言。
  • APP_VERSION - 崩溃的应用版本。示例:1.2.3或 2024.11.15
  • OS_BUILD_NUMBER - 生成ACR文件的操作系统内部版本号。示例:1001010003820
  • BUILD_VARIANT - 生成了ACR文件的构建类型。可能的值:user、userdebug或user-external。

崩溃原因参考

下表列出了您可能在CRASH_REASON字段中看到的崩溃原因、触发终止的原因,以及ACR文件是否包含小转储和堆栈跟踪。

OS release file(操作系统发布文件)

包含ACR文件收集的/etc/os-release的内容。此信息可帮助您验证发生崩溃的确切操作系统版本和编译配置,这在重现问题或确定崩溃是否特定于操作系统时非常有用。

Symbolicated stacktraces(符号化堆栈跟踪)

该部分包含解码后的堆栈跟踪,这些堆栈跟踪显示了导致崩溃的函数调用的确切位置和顺序。 崩溃语言决定了该部分中出现的堆栈跟踪:
  • JavaScript崩溃:只显示JavaScript堆栈跟踪
  • 原生崩溃:默认情况下仅显示原生堆栈跟踪

读懂堆栈帧

堆栈跟踪可显示导致崩溃的函数调用顺序。跟踪中的每行都是一个堆栈框架。 原生堆栈帧包括帧号、内存地址和库名称。如果调试符号可用,堆栈帧还会显示函数名称、源文件和行号。
JavaScript堆栈帧包含了函数名称、源文件和行号。

了解堆栈跟踪中的??

如果您在原生堆栈帧中看到??,就说明符号化工具无法解析该内存地址处的函数名称。这意味着调试符号不适用于该位置。通过检查相邻堆栈帧的上下文,您可以确定这对应于应用代码还是操作系统级/系统库代码。
包含??的帧不是应用中的错误。它们代表了在没有导出调试符号的情况下运行的系统代码。请重点关注显示应用的文件路径和函数名称的帧。 要确定崩溃是源于您的代码还是亚马逊的代码,请参阅检测应用崩溃的根源。

低内存杀手 (LMK) 崩溃

LMK崩溃不会产生堆栈跟踪,因为操作系统会在外部终止进程,而进程本身并未发生崩溃。CRASH_REASON字段对这些崩溃显示LowMemoryKiller。LowCPUKiller和LRUDepthMaintenance等相关资源管理器终止也缺少堆栈跟踪 - 有关完整列表,请参阅崩溃原因参考。 如果符号化堆栈跟踪部分为空且崩溃原因表示Resource Manager终止:
  1. 跳过堆栈跟踪部分。
  2. 查看系统信息以获取内存压力数据 - 查看前5个消耗内存最多的进程和压力信息统计数据。
  3. 如果您的应用出现在内存消耗量最高的消耗者中,请调查代码中是否可能存在内存泄漏、图像缓冲区过大或缓存过多。

ReclaimMediaResource崩溃

ReclaimMediaResource崩溃原因表示操作系统终止了您的应用,因为它在发送到后台时没有释放原生媒体播放资源(例如媒体解码器或视频表面)。操作系统会为其他应用回收这些资源。 当您的AppState后台处理程序使用async/await对资源清理进行排序时,就会发生这种崩溃。KeplerScript运行时会在后台过渡后暂停JavaScript线程,因此await之后的任何工作都可能永远无法执行。因此导致原生媒体资源没有被发布,操作系统终止了应用。 要修复此问题,请在进行任何异步操作之前在AppState后台处理程序中同步释放原生媒体资源。有关详细信息,请参阅在后台和前台之间转换应用状态。

崩溃来源分析

对于非ANR崩溃,摘要表明崩溃可能源于应用代码还是操作系统代码。工具分析符号化堆栈跟踪以确定崩溃来源:
  • 可能在应用层崩溃: 堆栈跟踪参考应用代码。查看堆栈跟踪了解详细信息。 示例:堆栈跟踪显示MyApp.handleUserInput() 或com.example.myapp.MainActivity.onCreate()
  • 可能在操作系统层崩溃: 工具在堆栈跟踪中未发现与应用相关的框架。请联系亚马逊支持。 示例:堆栈跟踪仅显示__libc_do_syscall() 或binder_call_internal() 的系统调用

系统信息

该部分显示崩溃时记录在ACR文件中的系统信息,包括:
  • 部分中最消耗内存的5个进程 示例:如果您的应用占用了250MB并出现在前5名,则内存压力可能是相关因素
  • 部分中的压力信息统计数据 示例:内存压力值高表明系统可用内存较少。

Native stacktrace - all threads(原生堆栈跟踪 - 所有线程)

该部分显示所有线程的原生堆栈跟踪。您可以通过在交互式GDB会话中运行thread apply all bt来生成此跟踪。

示例

未呈现的ACR摘要示例:

故障排除

如果您在ACR分析或符号化方面遇到问题,请参阅修复崩溃分析问题。

相关主题


最后修改于 2026年10月26日