符号化非托管代码崩溃
App Center诊断支持在应用程序中符号化非托管 C/C++ 代码崩溃。 可以符号化源自Android NDK代码的非托管代码崩溃,以及格式化为通过上传崩溃API上传的Breakpad小型故障。
将 Breakpad 与 App Center
Breakpad 是一个库和工具套件,可帮助生成 C 和 C++ 堆栈跟踪。 这些堆栈跟踪是在 Breakpad minidump 与项目集成后生成的文件中生成的。
Breakpad 提供了与Linux、Windows和Mac 应用程序集成入门指南。
将 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 符号
- 按照"获取调试符号"部分下的 Breakpad 文档中所述,使用 Breakpad 工具链转储符号。
- 创建 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 上传符号。
- 登录到 App Center 并选择应用。
- 在左侧菜单中,导航到 " 诊断 " 部分,然后选择 " 符号"。
- 在右上角,单击 " 上载符号 " 并上传文件。
- App Center 对符号进行索引后,将会为您符号化崩溃。
通过 API 上载符号的过程涉及到一系列三个 API 调用:一个用于在后端分配空间,一个用于上传文件,另一个用于更新上载状态。 第一个 API 调用的主体应设置 symbol_type 为 Breakpad 。
- 触发
POST对 symbol_uploads API的请求。 此调用在文件后端为文件分配空间,并返回symbol_upload_id和upload_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}'
- 使用
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}'
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 的选项卡,因为它们进入并流过系统。