dSYM が New Relic にアップロードされていないと、 モバイル クラッシュ レポート を記号化できません。 dSYM を手動でアップロードしたり、New Relic の UI から直接アップロードすることができます。しかし、アプリケーションのビルドごとに新しいdSYMが作成されるため、どのdSYMがどのアプリのビルドに起因するのかを管理するのは困難な場合があります。
このような状況では、Build UUID識別子を使って
- アプリケーションのユニークなビルドを識別します。
- どのdSYMがクラッシュのシンボリック化に使用できるかを調べます。
ビルドのUUIDを見る
1つのアプリケーションは複数のBuild UUIDを持つことができ、アプリケーションが構築されたCPUアーキテクチャごとに1つのBuild UUIDが割り当てられます。Build UUIDは、関連するdSYM内にも格納され、dSYMを識別するために抽出することができます。
New Relic のクラッシュレポートには、クラッシュしたアプリケーションの Build UUID も含まれています。Build UUID を表示するには。
- one.newrelic.com にアクセスし、トップナビの Mobile をクリックします。その後、自分のアプリを見つけ、 Crashes> Crash Analysis をクリックします。
- クラッシュリスト テーブル から、任意の行を選択します。
- 選択したクラッシュレポートの Crash Details ページ から、属性リストにある
App Image Uuid
を探します。
App Image Uuid
が選択したクラッシュレポートの属性リストにない場合。
- 衝突の詳細をエクスポートする.
- エクスポートされたクラッシュレポートの Binary images section の中にあるBuild UUIDを探してください。
クラッシュの詳細から抽出したBuild UUIDを使って、不足しているdSYMを見つけます。
バイナリ画像の例
以下は、エクスポートされたクラッシュレポートの Binary images セクションの例です。このセクションには、アプリケーションに含まれるすべての動的リンクライブラリのBuild UUIDと、メインアプリケーションのBuild UUIDが記載されています。
この例では、メインのアプリケーションは New Relic
です。そのBuild UUIDは 117667e7b8d230cb8a908906c64e0227
です。これは、関連するdSYMを見つけるために使用できる識別子です。
Binary Images:
0xb1000 - 0x30d000 New Relic armv7 <117667e7b8d230cb8a908906c64e0227> /var/containers/Bundle/Application/New Relic.app/New Relic
0x22290000 - 0x22292000 libSystem.B.dylib armv7 <39d6d6f7c2ac3de8bb29c40a1b66368a> /usr/lib/libSystem.B.dylib
0x22292000 - 0x222de000 libc++.1.dylib armv7 <017dba6c16b63f9ebecb9ddd0d0a4520> /usr/lib/libc++.1.dylib
0x222de000 - 0x222f9000 libc++abi.dylib armv7 <d32373f6c2153a509f6603750d213ffb> /usr/lib/libc++abi.dylib
0x222fc000 - 0x22667000 libobjc.A.dylib armv7 <94f6d325c1843f45b3a439b86fc9de15> /usr/lib/libobjc.A.dylib
0x22667000 - 0x2266c000 libcache.dylib armv7 <8009f99fb892331dbcb61cd740ff0f43> /usr/lib/system/libcache.dylib
0x2266c000 - 0x22676000 libcommonCrypto.dylib armv7 <f6db318471d732d39918ef36bde65cb7> /usr/lib/system/libcommonCrypto.dylib
0x22676000 - 0x2267c000 libcompiler_rt.dylib armv7 <cfa3ca12d6c2383abcaf3c8541e9b86c> /usr/lib/system/libcompiler_rt.dylib
0x2267c000 - 0x22683000 libcopyfile.dylib armv7 <d2b06020c3693c7b9d179434f8115ba0> /usr/lib/system/libcopyfile.dylib
0x22683000 - 0x226d3000 libcorecrypto.dylib armv7 <181437f8d9e53277ace439de8b3fd1ad> /usr/lib/system/libcorecrypto.dylib
0x226d3000 - 0x2271d000 libdispatch.dylib armv7 <bbb4bba2176039ab95a59d7a56f6eff8> /usr/lib/system/libdispatch.dylib
dSYMの発見と再記号化
dSYMのBuild UUIDを調べるには: dwarfdump
を以下のターミナルコマンドで使用します。
dwarfdump --uuid <path-to-dSYM>
以下の例では、New Relic dSYM は、 ARMv7
と ARM64
にそれぞれ1つずつ、計2つの Build UUID を返します。 ARMv7
のBuild UUIDは、不足しているクラッシュ 例 のBuild UUIDと一致しています。
> dwarfdump --uuid ./New\ Relic.app.dSYM/Contents/Resources/DWARF/New\ RelicUUID: 117667E7-B8D2-30CB-8A90-8906C64E0227 (armv7) ./New Relic.app.dSYM/Contents/Resources/DWARF/New RelicUUID: B1A8C6EE-02B9-3C55-AEE7-308521873107 (arm64) ./New Relic.app.dSYM/Contents/Resources/DWARF/New Relic
シンボリック化されていないクラッシュをシンボリック化するには、 手動でdSYM をアップロードする手順に従ってください。