符号化非托管代码崩溃

App Center诊断支持在应用程序中符号化非托管 C/C++ 代码崩溃。 可以符号化源自Android NDK代码的非托管代码崩溃,以及格式化为通过上传崩溃API上传的Breakpad小型故障。

将 Breakpad 与 App Center

Breakpad 是一个库和工具套件,可帮助生成 C 和 C++ 堆栈跟踪。 这些堆栈跟踪是在 Breakpad minidump 与项目集成后生成的文件中生成的。 Breakpad 提供了与Linux、WindowsMac 应用程序集成入门指南。

将 Breakpad 故障日志发送到App Center

Android NDK

App Center NDK 运行非 托管代码,为 Android 应用程序提供 SDK 集成。 此集成将创建 Breakpad 小型ump,并自动将其上传到App Center中。

其他应用程序

将 Breakpad 与应用程序集成后,可以上传 Breakpad 故障日志和小型App Center。

符号化非托管崩溃

生成 Breakpad 符号有效负载

App Center诊断要求符号从 Breakpad 小型转储生成可读堆栈跟踪。 上传的符号存档必须包含使用 Breakpad 工具生成的文件或 .sym dump_syms .so 二进制文件。

生成要上传的 .zip 文件

有两种方法App Center检索符号所需的符号。 App Center从项目中使用的本机二进制文件生成它们,也可以直接上传 Breakpad 符号。

选项 1:上传本机二进制文件

将项目目录中的所有 .so obj/local/$ABI/ 文件放入 .zip 文件。

选项 2:上传 Breakpad 符号

  1. 按照"获取调试符号"部分下的 Breakpad 文档中所述,使用 Breakpad 工具链转储符号。
  2. 创建 symbols.zip 以下结构的文件:

备注

如果要从 macOS 上传符号,则必须清除任何多余的文件夹的符号,例如__MACOS生成 __MACOS 并删除它,可以使用 zip -d <symbols.zip> __MACOSX/\*

$ unzip -l symbols.zip
Archive:  symbols.zip
  Length     Date   Time    Name
 --------    ----   ----    ----
        0  07-22-13 15:07   symbols/
        0  07-22-13 15:07   symbols/libnative.so/
        0  07-22-13 15:07   symbols/libnative.so/EAC901FB6DDCCE8AED89E1A8E4A58360/
    12468  07-22-13 15:07   symbols/libnative.so/EAC901FB6DDCCE8AED89E1A8E4A58360/libnative.so.sym
        0  07-22-13 15:07   symbols/libnative.so/FDC5C9E715C4F16408C0B78F95855BF0/
    12467  07-22-13 15:07   symbols/libnative.so/FDC5C9E715C4F16408C0B78F95855BF0/libnative.so.sym
 --------                   -------
    24935                   6 files

将符号上传到App Center

可以通过门户、API App Center CLI 上传符号。

  1. 登录到 App Center 并选择应用。
  2. 在左侧菜单中,导航到 " 诊断 " 部分,然后选择 " 符号"。
  3. 在右上角,单击 " 上载符号 " 并上传文件。
  4. App Center 对符号进行索引后,将会为您符号化崩溃。

通过 API 上载符号的过程涉及到一系列三个 API 调用:一个用于在后端分配空间,一个用于上传文件,另一个用于更新上载状态。 第一个 API 调用的主体应设置 symbol_typeBreakpad

  1. 触发 POSTsymbol_uploads API的请求。 此调用在文件后端为文件分配空间,并返回 symbol_upload_idupload_url 属性。
curl -X POST 'https://api.appcenter.ms/v0.1/apps/{owner_name}/{app_name}/symbol_uploads' \
    -H 'accept: application/json' \
    -H 'X-API-Token: {API TOKEN}' \
    -H 'Content-Type: application/json' \
    -d '{JSON BODY}'
  1. 使用 upload_url 第一步中返回的属性,发出 PUT 带有标头的请求: "x-ms-blob-type: BlockBlob" 并提供文件在磁盘上的位置。 此调用会将文件上传到后端存储帐户。 了解有关 放置 Blob 请求标头 的详细信息。
curl -X PUT '{upload_url}' \
    -H 'x-ms-blob-type: BlockBlob' \
    --upload-file '{path to file}'
  1. PATCH使用第一步中返回的属性向symbol_uploads API发出请求 symbol_upload_id 。 在请求正文中,指定是要将上传的状态设置 (为 "已 committed 成功完成") 上载过程,还是 ("未 aborted 成功完成) "。
curl -X PATCH 'https://api.appcenter.ms/v0.1/apps/{owner_name}/{app_name}/symbol_uploads/{symbol_upload_id}' \
    -H 'accept: application/json' \
    -H 'X-API-Token: {API TOKEN}' \
    -H 'Content-Type: application/json' \
    -d '{ "status": "committed" }'

备注

符号上载 API 不适用于大小超过256MB 的文件。 使用 App Center CLI 上传这些文件。 可以按照我们的 APP CENTER cli存储库中的说明安装 App Center CLI。

忽略符号

如果 App Center 没有所有符号文件来完全标志崩溃报告,则故障将列在 " Unsymbolicated " 选项卡中。如果有权访问所需的符号,可以从此页上传这些符号。

如果无法上载符号,可以通过选择表中的行并单击 "忽略版本" 按钮,将其标记为已 忽略。 此按钮指示 App Center 处理崩溃,并使其尽可能完全地处理文件中的符号标志。 完成处理后,它们将出现在部分符号化的 " 崩溃 " 选项卡中。 也依赖于标记为 "已忽略" 的相同符号 Id 的新崩溃将绕过 Unsymbolicated 的选项卡,因为它们进入并流过系统。