重要
Visual Studio App Center 于 2025 年 3 月 31 日停用,但分析和诊断功能除外,这些功能将继续受支持,直到 2026 年 6 月 30 日。 了解详细信息。
App Center 诊断支持对应用程序中非托管 C/C++ 代码崩溃进行符号化解析。 可以符号化由Android NDK 代码引起的非托管代码崩溃,并且可以符号化格式为Breakpad 微型转储的非托管代码崩溃,这些崩溃是通过上传崩溃 API上传的。
将 Breakpad 与 App Center 配合使用
Breakpad 是一个库和工具套件,可帮助生成 C 和 C++ 堆栈跟踪。 这些堆栈跟踪是从 Breakpad 与项目集成后生成的minidump
文件生成的。
Breakpad 提供了用于与 Linux、 Windows 和 Mac 应用程序集成的入门指南。
将 Breakpad 崩溃日志发送到 App Center
Android NDK
App Center 为 Android 应用程序提供 SDK 集成 ,使用 NDK 运行非托管代码。 此集成将创建 Breakpad minidumps,并自动将它们上传到 App Center。
其他应用程序
应用程序与 Breakpad 集成后,可以将 Breakpad 故障日志和迷你转储 上传到应用中心。
符号化未托管崩溃
生成 Breakpad 符号数据包
App Center 诊断要求符号以从 Breakpad 迷你转储生成可读的堆栈跟踪。
上传的符号档案必须包含通过 Breakpad dump_syms
工具生成的 .sym
文件,或 .so
二进制文件。
生成要上传的 .zip 文件
App Center 有两种方法可以检索符号化所需的符号。 App Center 可以从项目中使用的本机二进制文件生成它们,也可以直接上传 Breakpad 符号。
选项 1:上传本机二进制文件
将项目 obj/local/$ABI/
目录中的所有 .so 文件放入 .zip 文件中。
选项 2:上传 Breakpad 符号
- 使用Breakpad工具链导出符号,如Breakpad文档“获取调试符号”部分中所述。
- 使用以下结构创建 symbols.zip 文件:
注释
如果您要从 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
可以通过 App Center 门户、API 或 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"
请求。 此调用会将文件上传到后端存储帐户。 详细了解 PUT Blob 请求标头 。
curl -X PUT '{upload_url}' \
-H 'x-ms-blob-type: BlockBlob' \
--upload-file '{path to file}'
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 缺少完全符号化崩溃报告的所有符号文件时,崩溃将被列在 “未符号化” 选项卡中。如果您有权访问所需的符号文件,请从此页面上传它们。
如果无法上传符号,可以通过选择表中的行并单击“忽略版本”按钮将其标记为“忽略”。 此按钮告知 App Center 处理崩溃,并使用文件中的符号尽可能全面地对其进行符号化。 完成处理后,它们将显示在“ 崩溃 ”选项卡中部分符号化。 新的崩溃,也依赖于标记为被忽略的相同符号 ID 将绕过 未配置 选项卡,因为它们传入并流经系统。