次の方法で共有


非管理コードのクラッシュをシンボル化する

重要

Visual Studio App Center は、2026 年 6 月 30 日まで引き続きサポートされる分析機能と診断機能を除き、2025 年 3 月 31 日に廃止されました。 詳細を参照してください。

App Center Diagnostics では、アプリケーションでアンマネージド C/C++ コードのクラッシュをシンボル化できます。 Android NDK コードで発生したアンマネージド コードクラッシュをシンボル化し、Upload Crashes API を介してアップロードされた Breakpad ミニダンプとしてフォーマットされたアンマネージド コードクラッシュをシンボル化できます。

App Center での Breakpad の使用

Breakpad は、C および C++ スタック トレースの生成に役立つライブラリとツール スイートです。 これらのスタック トレースは、Breakpad がプロジェクトに統合された後に生成された minidump ファイル から生成されます。 Breakpad には、 LinuxWindowsMac アプリケーションと統合するためのスターター ガイドが用意されています。

App Center への Breakpad クラッシュ ログの送信

Android NDK

App Center では、NDK を使用してアンマネージド コードを実行する Android アプリケーション用の SDK 統合 が提供されます。 この統合により、Breakpad ミニダンプが作成され、自動的に App Center にアップロードされます。

その他のアプリケーション

Breakpad がアプリケーションと統合されたら、 Breakpad のクラッシュ ログとミニダンプを App Center にアップロードできます。

管理されていないクラッシュのシンボル化

ブレークパッド シンボル ペイロードの生成

App Center Diagnostics には、Breakpad ミニダンプから読み取り可能なスタック トレースを生成するためのシンボルが必要です。 アップロードされたシンボル アーカイブには、Breakpad .sym ツールを使用して生成されるdump_syms ファイルまたはバイナリ ファイル.so含める必要があります。

アップロードする .zip ファイルを生成する

App Center でシンボル化に必要なシンボルを取得するには、2 つの方法があります。 App Center では、プロジェクトで使用されているネイティブ バイナリから生成することも、Breakpad シンボルを直接アップロードすることもできます。

オプション 1: ネイティブ バイナリをアップロードする

プロジェクトの obj/local/$ABI/ ディレクトリからすべての .so ファイルを .zip ファイルに配置します。

オプション 2: ブレークパッドシンボルをアップロードする

  1. 「デバッグ シンボルの取得」セクションの Breakpad ドキュメント で説明されているように、Breakpad ツールチェーンを使用してシンボルをダンプします。
  2. 次の構造の 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 を使用してアップロードできます。

  1. App Center にログインし、アプリを選択します。
  2. 左側のメニューで、[ 診断 ] セクションに移動し、[シンボル] を選択 します
  3. 右上隅にある [ シンボルのアップロード ] をクリックし、ファイルをアップロードします。
  4. シンボルのインデックスが App Center によって作成されると、クラッシュがシンボル化されます。

API を介してシンボルをアップロードするプロセスには、一連の 3 つの API 呼び出しが含まれます。1 つはバックエンドに領域を割り当て、1 つはファイルをアップロードし、1 つはアップロードの状態を更新します。 最初の API 呼び出しの本文では、 symbol_typeBreakpad に設定する必要があります。

  1. POST に対する要求をトリガーします。 この呼び出しにより、ファイルのバックエンドに領域が割り当てられ、 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" し、ディスク上のファイルの場所を指定します。 この呼び出しにより、ファイルがバックエンド ストレージ アカウントにアップロードされます。 PUT BLOB 要求ヘッダーの詳細を確認します。
curl -X PUT '{upload_url}' \
    -H 'x-ms-blob-type: BlockBlob' \
    --upload-file '{path to file}'
  1. 最初の手順から返されたPATCH プロパティを使用して、symbol_uploads APIsymbol_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 は、256 MB を超えるファイルでは機能しません。 これらのファイルをアップロードするには、App Center CLI を使用します。 App Center CLI リポジトリの手順に従って、 App Center CLI をインストールできます。

シンボルの無視

クラッシュ レポートを完全にシンボル化するためのシンボル ファイルがすべて App Center に含まれていない場合、クラッシュは [ Unsymbolicated ] タブに一覧表示されます。必要なシンボルにアクセスできる場合は、このページからアップロードされます。

シンボルをアップロードできない場合は、テーブル内の行を選択して [バージョンを無視] ボタンをクリックすることで、シンボルを無視としてマークできます。 このボタンは、クラッシュを処理し、ファイル上のシンボルを使用して可能な限り完全にシンボル化するように App Center に指示します。 処理が完了すると、部分的にシンボル化された [ クラッシュ ] タブに表示されます。 無視済みとしてマークされた同じシンボル ID に依存する新しいクラッシュは、Unsymbolicated タブを通過し、システム内で処理されます。