分析 iOS app 因 dSYM 文件导致的崩溃

您可以在 Instana 上查看 iOS app 崩溃的详细信息。 详细信息包括移动应用程序的所有活动线程的堆栈跟踪。 这些堆栈跟踪包含内存地址和原始函数名。 您可以使用 Instana 将堆栈跟踪转换为有意义的信息。

要编译数据, Instana 需要来自 iOS app 的调试符号( dSYM )文件。 dSYM 文件用于符号化。 符号化 是将活动内存地址转换为人类可读格式的过程。

要翻译堆栈跟踪信息,请将 dSYM 文件上传至 Instana。 您可以通过调用 Web REST API 来上传 dSYM 文件。 文件 dSYM 上传完成后, Instana 界面将显示有关崩溃的更多详细信息。 要查看详细信息,请在 崩溃 选项卡上单击 崩溃的线程 。 有关更多信息,请参阅 崩溃

注意:Instana 不支持对已发生崩溃的事件进行追溯性转换。 Instana 仅翻译在源映射文件正确上传并提交后发生的崩溃。

上传 dSYM 文件

在上传文件 dSYM 之前,请确保满足以下先决条件:

  • 已创建一个 API 令牌,并启用了用于移动应用监控的配置权限。 如需了解更多信息,请参阅 API Tokens
  • 源地图会存储在自托管的自定义版本中( Kubernetes 或 Red Hat OpenShift Container Platform )。 如需更多信息,请参阅 “配置外部存储 ”。
  • 请确保您上传的文件 dSYM 与当前应用版本相符。 例如,每次更新应用时,您都必须上传更新后的 dSYM 文件。
注意: 应用程序的每次构建都会生成一个唯一的 dSYM 文件,即使应用程序版本保持不变。 为确保正确解析崩溃报告,您必须将该构建生成的确切 dSYM 文件上传至 Instana 应用程序。

要将 dSYM 文件上传至 Instana ,请按照以下步骤操作:

  1. 在 Instana 界面中,创建一个配置以上传该 dSYM 文件:

    1. Go 前往 “网站与移动应用” > “移动应用 ”。

    2. 单击移动应用程序。 这样会显示移动应用程序仪表板。

    3. 单击 配置 > 堆栈跟踪转换

      图 1. 符号文件上传配置视图
      显示符号文件上载配置视图的截屏
    4. 单击 添加配置。 此时将显示 "新建符号文件上载配置" 对话框。

    5. 描述 字段中,输入上载的描述。

    6. 单击创建。 此时将显示 "编辑符号文件上载配置" 对话框。 使用对话框中显示的 Web REST API 来上载 dSYM 文件。 请参阅步骤 3。

    7. 单击保存。 将保存配置。

    注意: 每个移动应用最多可上传 1,024 组源地图配置。 每个移动应用的源映射配置最大存储空间为 2,048 MB。 如需提高此限制,请联系 Instana 客服。
  2. dSYM 文件压缩到 .tgz 文件中:

       tar czf <archive name>.tgz <files or locations>
     

    以下片段中显示了该命令的示例:

       tar czf your_app.dSYM.tgz your_app.dSYM_folder
     
  3. 如果压缩文件大小超过 10 MB ,请将 .tgz 文件拆分为多个 BLOB (每个 9 MB):

       split -b 9m <archive name>.tgz <file>.tgz_blob_
     

    以下片段中显示了该命令的示例:

       split -b 9m your_dSYM_file.tgz your_dSYM_file.tgz_blob_
     
  4. 请通过 Instana 网站 REST API 上传文件。 请完成下列其中一个步骤:

    • 如果上载包含多个 BLOB ,请运行:

          curl -L -X PUT \
               'https://$UNIT-$TENANT.instana.io/api/mobile-app-monitoring/config/$MOBILE_APP_ID/sourcemap-upload/$UPLOAD_CONFIG_ID/form' \
               -H 'authorization: apiToken $API_TOKEN' \
               -F 'fileId="$BUNDLE_IDENTIFIER_OF_APP, for example com.instana.ios.testapp1"' \
               -F 'fileType="dSYM"' \
               -F 'blobIndex=1' \
               -F 'sourceMap=@"$LOCAL_SYMBOLFILE_LOCATION"'
       
      注:blobIndex 从 1 开始,而不是从 0 开始。 对于每个后续的斑块,将 blobIndex 增加1。
    • 如果上载仅包含一个文件,请运行:

          curl -L -X PUT \
               'https://$UNIT-$TENANT.instana.io/api/mobile-app-monitoring/config/$MOBILE_APP_ID/sourcemap-upload/$UPLOAD_CONFIG_ID/form' \
               -H 'authorization: apiToken $API_TOKEN' \
               -F 'fileId="$BUNDLE_IDENTIFIER_OF_APP, for example com.instana.ios.testapp1"' \
               -F 'fileType="dSYM"' \
               -F 'sourceMap=@"$LOCAL_SYMBOLFILE_LOCATION"'
       

      如果压缩文件的大小超过 10 MB ,那么将显示错误消息 request entity too large 。 请参阅步骤 3。

  5. 落实上载:

          curl -L -X PUT \
               'https://$UNIT-$TENANT.instana.io/api/mobile-app-monitoring/config/$MOBILE_APP_ID/sourcemap-upload/$UPLOAD_CONFIG_ID/commit' \
               -H 'authorization: apiToken $API_TOKEN' \
               -F 'fileId="$BUNDLE_IDENTIFIER_OF_APP, for example com.instana.ios.testapp1"' \
               -F 'fileType="dSYM"'
     

在执行提交命令之前,请先上传所有二进制大对象。 您可以在 Instana 用户界面中查看每个源映射已上传的Blob数量。 对于不使用聚合的源地图,聚合数显示为 1。

注意: 对于大型源代码映射,提交操作可能需要一些时间才能完成。 提交成功后,源映射的提交状态显示为 Success

从 Instana 中删除文件 dSYM

要从 Instana 中删除文件 dSYM ,请执行以下任一操作:

  • Go 转到 “网站与移动应用 ” > “移动应用 ” > “配置” > “堆栈跟踪转换 ”,然后点击该配置旁边的 “删除 ”图标。

  • 调用 Web REST API 方法。 以下示例中显示了样本命令:

       curl -L -X PUT \
          'https://$UNIT-$TENANT.instana.io/api/mobile-app-monitoring/config/$MOBILE_APP_ID/sourcemap-upload/$UPLOAD_CONFIG_ID/clear' \
            -H 'authorization: apiToken $API_TOKEN'