as

Settings
Sign out
Notifications
Alexa
亚马逊应用商店
Ring
AWS
文档
Support
Contact Us
My Cases
新手入门
设计和开发
应用发布
参考
支持

利用ACR摘要进行崩溃调试

利用ACR摘要进行崩溃调试

“汇总崩溃报告”(ACR) 摘要将所有崩溃调试数据整理到一个markdown文件中。Vega Studio会在每次符号化结束时自动生成摘要。

先决条件

了解ACR文件和摘要报告

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

  定义 位置 何时共享
ACR文件 设备在崩溃时生成的原始崩溃数据 从设备复制到您选择的本地文件夹 联系亚马逊支持人员时共享此文件
摘要报告 Vega Studio在符号化后生成的经过解码的可读Markdown文件。用于确定崩溃的根本原因。 生成的位置为acr_workdir_<hash>/summary_report.md(在Vega Studio中自动打开) 请勿与亚马逊支持人员共享此文件

如何使用摘要

符号化完成后,Vega Studio会自动在新选项卡中打开摘要。

要诊断崩溃,请按照以下步骤操作:

  1. 元数据开始 - 检查崩溃原因和语言,以了解出现的崩溃类型。

  2. 检查符号化堆栈跟踪 - 在堆栈跟踪中查找您的应用代码中的函数名称。

  3. 查看系统信息 - 检查崩溃时的使用情况。

  4. 与源代码交叉引用 - 使用堆栈跟踪中的文件路径和行号来找出项目中有问题的代码。

  5. 确定后续步骤

    • 如果崩溃出现在您的应用代码中,请修复问题并进行测试
    • 如果崩溃出现在操作系统代码中,或者您只能看到系统帧,请联系亚马逊支持人员并提供ACR文件
    • 如果您不确定,请参阅崩溃来源分析以获取指导说明
    • 如果符号化失败或摘要不完整,请参阅修复崩溃分析问题

摘要结构

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

文件头

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

示例:

Path to ACR file: /Users/username/my-app-crash.acr
Path to acr_workdir: /Users/username/acr_workdir-a1b2c3d4

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.32024.11.15

  • OS_BUILD_NUMBER - 生成ACR文件时所用操作系统的内部版本号。示例: 1001010003820

  • BUILD_VARIANT - 生成ACR文件时所用的版本类型。可能的值:user、userdebug或user-external。

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

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

Symbolicated stacktraces(符号化堆栈跟踪)

该部分包含解码后的堆栈跟踪,这些堆栈跟踪显示了导致崩溃的函数调用的确切位置和顺序。

崩溃语言决定了该部分中出现的堆栈跟踪:

  • JavaScript崩溃: 只显示JavaScript堆栈跟踪

  • 原生崩溃: 默认情况下仅显示原生堆栈跟踪

读懂堆栈帧

堆栈跟踪可显示导致崩溃的函数调用顺序。跟踪中的每行都是一个堆栈框架。

原生堆栈帧包括帧号、内存地址和库名称。如果调试符号可用,堆栈帧还会显示函数名称、源文件和行号。

#0  0xa1a701bc in VegaProjectTMTurboModule::VegaProjectTM::voidFunc (this=0xa1d99838) at /Users/developer_name/workspace/vega/testapp/VegaProjectTM/kepler/turbo-modules/VegaProjectTM.cpp:33

JavaScript堆栈帧包含了函数名称、源文件和行号。

at onPress (node_modules/@amazon-devices/react-native-kepler/Libraries/Pressability/Pressability.js:587:18)

了解堆栈跟踪中的??

如果您在原生堆栈帧中看到??,就说明符号化工具无法解析该内存地址处的函数名称。这通常表示操作系统级或系统库代码没有可用的调试符号。

#0 0xb6e01b26 in ?? () from /private/var/folders/_p/.../lib/libc.so.6

包含??的帧不是应用中的错误。它们代表了在没有导出调试符号的情况下运行的系统代码。请重点关注显示应用的文件路径和函数名称的帧。

要确定崩溃是源于您的代码还是亚马逊的代码,请参阅检测应用崩溃的根源

低内存杀手 (LMK) 崩溃

LMK崩溃不会产生堆栈跟踪,因为操作系统会在外部终止进程,而进程本身并未发生崩溃。如果符号化堆栈跟踪部分为空,且CRASH_REASON指示LMK,请跳过此部分,改为检查系统信息以获取内存压力数据。

System info(系统信息)

该部分显示崩溃时记录在ACR文件中的系统信息,包括:

  • <meminfo>部分中最消耗内存的5个进程

    示例: 如果您的应用占用了250MB并出现在前5名,则内存压力可能是相关因素

  • <pressure_info>部分中的压力信息统计数据

    示例: 内存压力值高表明系统可用内存较少。

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

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

示例

未呈现的ACR摘要示例:

# ACR摘要

Path to ACR file: [/Users/user/callie-test.acr](./crashfile)

Path to acr_workdir: /Users/user/acr_workdir-c4bcb13c

## 元数据

PROCESS: /usr/bin/eventmgrd
CRASH_REASON: SIGABRT
CRASH_LANG: Native
APP_VERSION: N/A
OS_BUILD_NUMBER: 1001010003820
BUILD_VARIANT:user
PRODUCT_NAME:callie
BUILD_FINGERPRINT: 4.0.137942.0(3072cab629675a74)/38N:user/release-keys
OE_VERSION: 4.0.0

## 操作系统发布文件

NAME="OS"
OE_VERSION="4.0.0"
OS_MAJOR_VERSION="1"
OS_MINOR_VERSION="1"
RELEASE_ID="10"
OS_VERSION="1.1"
BRANCH_CODE="TV Ship"
BUILD_DESC="OS 1.1 (TV Ship/38)"
BUILD_FINGERPRINT="4.0.137942.0(3072cab629675a74)/38N:user/release-keys"
BUILD_VARIANT="user"
BUILD_TAGS="release-keys"
BUILD_DATE="Fri Jul 25 01:48:20 UTC 2025"
BUILD_TIMESTAMP="1753408100"
VERSION_NUMBER="1001010003820"

## 符号化堆栈跟踪

### 原生堆栈跟踪

<details open>
<summary>展开以查看原生堆栈跟踪</summary>
<pre>
#0  __libc_do_syscall () at ../sysdeps/unix/sysv/linux/arm/libc-do-syscall.S:47
#1  0xb6877d98 in __GI___ioctl (fd=-4, request=3224396289) at ../sysdeps/unix/sysv/linux/ioctl.c:35
#2  0xb67544ba in binder_call_internal (runtime=0xf8a2c8, target=<optimized out>, code=<optimized out>, request=<optimized out>, response=0xb2d32cd8) at /usr/src/debug/app-framework-neocoreipc/ssot-r0/app-framework-neocoreipc/cargo-project/api/runtimes/binder/direct/binder.c:1057
#3  0xb6754548 in binder_call (runtime=<optimized out>, target=<optimized out>, code=<optimized out>, request=<optimized out>, response=0xb2d32cd8) at /usr/src/debug/app-framework-neocoreipc/ssot-r0/app-framework-neocoreipc/cargo-project/api/runtimes/binder/direct/binder.c:1082
#4  0xb6754d3c in ipcn_runtime_call (runtime=<optimized out>, remote_handle=<optimized out>, code=<optimized out>, request=<optimized out>, reply=reply@entry=0xb2d32cd8) at /usr/src/debug/app-framework-neocoreipc/ssot-r0/app-framework-neocoreipc/cargo-project/api/runtimes/binder/direct/ipcn_runtime_binder.c:235
#5  0xb67569a6 in ipcn_call (runtime=0xf8a2c8, target=<optimized out>, code=<optimized out>, request=<optimized out>, reply=0xb2d32cd8) at /usr/src/debug/app-framework-neocoreipc/ssot-r0/app-framework-neocoreipc/cargo-project/api/core/ipcn_call.c:103
#6  0xb1be0418 in ?? ()
回溯已停止:前一帧与此帧相同(堆栈损坏?)

故障排除

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


Last updated: 2026年2月18日